This patch allows creating a hierarchy of `SideEffects::Resource`s by adding a virtual `getParent()` method, so that effects on *disjoint* resources can be proven non-conflicting. It also adds virtual `isAddressable()` method that represents a property of a resource to be addressable via a pointer value. The non-addressable resources may not be affected via any pointer. This is unblocking CSE, LICM and alias analysis without per-pass special-casing. RFC: https://discourse.llvm.org/t/rfc-mlir-memory-region-hierarchy-for-mlir-side-effects/89811