This diff refactors StepInput 's current modeling of input sources since it has gotten pretty messy and isn't able to support fan-in + input mapping. A subsequent diff will add and test the support for fanning in input mappings.
This introduces StepInputSource as a marker class for an input union of sources that express how a step input should be loaded. The current set up forces call sites to instanceof check against these types do decide how to process them. This is a little cumbersome/verbose but i think increases the likely hood that these callsites will handle all the different cases correctly, or at least have a useful error in the final else case.