This is risky and I think it should probably be chunked up,
but this changes the config type system to only operate on instances
rather than classes. I think this is huge leap forward in terms of
being able to understand and deal with this. Creating objects is
just way more intuitive than creating classes.
Note that this is an RFC. We can chat about it, but it is probably good
to chop this up as there are a couple questionable things in here.
Notably passing config type instances to python.typing is not supported.
I had to add a fake call method to configtype in order to trick python.typing
into allowing the object. I assume this would break mypy as well, but who knows.
This also eliminates the invariant that two different type instances with the
same name is not allows. We used to enforce that there is only one instance. As
we move away from named types this will not be a concern as the hashing will
take care of this.