Legalize things like i24 load/store by splitting them into smaller power of 2 operations.
This change also adds an artifact combiner for G_INSERT -> G_EXTRACT where we can just forward the inserted value straight to the user of the extract. To do this I had to add G_INSERT to the list of artifact opcodes, and then to fix test failures where the legalization order meant that we need to try to combine them away before they're legalized, so that we don't have to look through G_TRUNC ops in between.
Why can't uses use getMachineMemOperand for both halves from the original?