MLIR can't really be const-correct (it would need a `ConstValue` class
alongside the `Value` class really, like `ArrayRef` and
`MutableArrayRef`). This is however making is more consistent: method
that are directly modifying the Value shouldn't be marked const.
Do not match on illegal destination blocks. Also apply some minor
cleanups.
TODO: We should add region/block argument type conversions to properly
address this.
Issue: https://github.com/llvm/llvm-project/issues/70813