[MLIR][Linalg] Change insertion point for `bubbleUpPackOpThroughElemGenericOp`
Currently, the insertion point for `bubbleUpPackOpThroughElemGenericOp`
is after the tensor.pack this means that the new generic will be created
right after the tensor.pack. This is inconvenient because we are moving
the position of the generic; the idea is to move pack/unpack around, not
linalg.generics. This PR changes the insertion point to preserve the
position of the generic.
Additionally, it restricts the pattern to fire if the generic has a
single user (`tensor.pack`) to avoid introducing recomputation.
Reviewed By: hanchung
Differential Revision: https://reviews.llvm.org/D144246