Introduce pushDownUnPackOpThroughElemGenericOp to propagate producer
unpack operation through an element-wise linalg.generic operation. This
pattern complements BubbleUpPackOpThroughElemGenericOp. The general
idea is to bubble up tensor.pack as much as possible while pushing down
tensor.unpack as much as possible, and canonicalize away symmetrical
tensor.pack and tensor.unpack operations.
Currently, pushDownUnPackOpThroughElemGenericOp expects a single
tensor.unpack operation as the producer of one of the linalg.generic's
operands.
nit: unpack