Fixes issue reported by @aemerson on D57348. Vector op legalization support is added for uaddo, usubo, saddo and ssubo (umulo and smulo were already supported). As usual, by extracting TargetLowering methods and calling them from vector op legalization.
Vector op legalization doesn't really deal with multiple result nodes, so I'm explicitly performing a recursive legalization call on the result value that is not being legalized (this was also missing for the mulo case, which I've fixed as well).
There are lots of existing test changes. I haven't looked too closely at these, I think this is because expansion happens earlier, so we don't get a DAG combiner run in between anymore.
It's interesting that we even pretend to handle SMUL_LOHI/UMUL_LOHI/SDIVREM/UDIVREM in this file. They aren't explicitly handled in Expand and will fall back to UnrollVectorOp which doesn't support multiple results. But I suspect we never create vector versions of theses nodes if they aren't marked Legal/Custom.