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.
Does this need to be public?