Support returning arbitrary tensors from functions. Even those that are not equivalent. To that end, additional information is gathered during the analysis phase. In particular, which function args are aliasing with which return values.
Also fix bugs in the current implementation when returning equivalent tensors. Various unit tests are added to ensure that we have better test coverage.
Note: Returning non-equivalent tensors is only allowed when allowReturnAllocs is enabled. This functionality is useful for unit testing and compatibility with other bufferizations such as the sparse compiler. This is also towards using ModuleBufferization as a replacement for --func-bufferize.
Depends On D123208
Please add a meaningfully named type, e.g. using MeaningfulTypeName = int64_t