MLIR emitters: Vectorize column reductions.
MLIR emitters: Vectorize column reductions.

Special thanks to github user lingzhi98 who experimented with this in
https://github.com/openxla/xla/pull/11018.

I tried to make the logic as similar for vectorized and non-vectorized
reductions as I could. The vectorized logic looks like this:

- produce N reduced elements per thread, store the intermediate results in
  a vector V
- loop over the N elements of V, writing each one to shmem
- loop over N elements, reading them from shmem and writing the result to
  global memory
