Add a new version of fusion on tensors that supports the following scenarios:
- support input and output operand fusion
- fuse a producer result passed in via tile loop iteration arguments (update the tile loop iteration arguments)
- supports only linalg operations on tensors
- supports only scf::for
- cannot add an output to the tile loop nest
The LinalgTileAndFuseOnTensors pass tiles the root operation and fuses its producers.
Pure style comments: Its probably better to have a struct that is just fields, and have helper methods within a file. Unless these methods are required outside of the tiling algorithm, I dont think there is a need to expose these as methods.