Replace the legacy legalizers for G_ADD/G_SUB with an approach that should work for the full mixture of scalar/vector types we need to support for most opcodes.
If we can decide on this as a suitable pattern we can reuse it for the other op types, but G_ADD/G_SUB are the only ones that have decent legalizer test coverage at this stage.
I've also refactored the G_CTPOP/G_LZCNT entries to match for reference (I'll commit these separately).