MLIR emitters: Vectorize transposes with small element types.
MLIR emitters: Vectorize transposes with small element types.

Special thanks to github user lingzhi98, who proposed and benchmarked
this optimization and implemented it in https://github.com/openxla/xla/pull/12552.
It turned out that the Tiling abstraction made this harder than it needs to be.
This is an independent reimplementation that removes the Tiling abstraction, but
reuses lingzhi98's tests and most of their heuristic for enabling vectorization.

The differences in the heuristic are:
- respect the shared memory budget
- enable vectorization if the dimensions are divisible by 2, not just when
  they are divisible by 64.
