Completely separate out MachineIRBuilderState from MachineIRBuilder as it makes it possible to use different kinds of builders (ConstantFolding/CSEing) by just passing the State.
This makes it inconvenient by 1 extra line to define a builder - for eg
MachineIRBuilderState State; MachineIRBuilder B(State); AnyOtherBuilder AOB(State);
Also instead of passing in MachineIRBuilder everywhere - pass in the state - this allows for the target/hook to be explicit about what they expect the builder to do.