This replaces the direct lowering of vector.outerproduct to LLVM with progressive lowering into elementary vectors ops to avoid having the similar lowering logic at several places.
NOTE1: with the new progressive rule, the lowered llvm is slightly more elaborate than with the direct lowering, but the generated assembly is just as optimized; still if we want to stay closer to the original, we should add a "broadcast on extract" to shuffle rewrite (rather than special cases all the lowering steps)
NOTE2: the original outerproduct lowering code should now be removed but some linalg test work directly on vector and contain some dead code, so this requires another CL
I don't think VectorChangesLoweringPatterns is appropriate, this is really all the patterns that come together to lower VectorContract.
I would either keep the original name of call it polulateVectorContractAndDependentLoweringPatterns.
In the future I expect we'll have more "key" vector ops that will be lowered through other patterns and "Change" wouldn't work either.