This adds some level of type safety, allows helper functions to be added for specific opcodes for free, and also allows us to succinctly check for class membership with the usual dyn_cast/isa/cast functions.
To start off with, add variants for the different load/store operations with some places using it.
Can we get away with allocating these as regular MachineInstrs since there are no real members?