This diff asks the question: "what if we got rid of the loader attribute on DagsterType and instead handled type-based loading inside input managers?"
A couple notable things:
* Dynamic config schema - the per-input config provided by the input manager definition depends on the InputDefinition of the input.
* Now, every InputDefinition has a default manager key - "input_manager". The default resource def provided for "input_manager" is an input manager that knows how to load primitive types from config and defers to the upstream object manager otherwise. Without this, type-based input-loading would not work out of the box.
The test cases at the end of the diff provide a comparison of the old and new user experience. I can also explore some more complex situations, but wanted to make sure the basic one is palatable.