The change is based on the proposal from the following discussion:
- Introduce MemRefLayoutAttr interface to get AffineMap from an Attribute (AffineMapAttr implements this interface).
- Store layout as a single generic MemRefLayoutAttr.
This change removes the affine map composition feature and related API.
Actually, while the MemRefType itself supported it, almost none of the upstream
can work with more than 1 affine map in MemRefType.
The introduced MemRefLayoutAttr allows to re-implement this feature
in a more stable way - via separate attribute class.
Also the interface allows to use different layout representations rather than affine maps.
For example, the described "stride + offset" form, which is currently supported in ASM parser only,
can now be expressed as separate attribute.