Add explicit imports for types and fix bugs (#57302)
I was playing with strengthening the semantics around #57290. However,
the particular change I was trying turned out too breaking (I may try a
weaker version of it). Still, there were a number of good changes found
in two categories:
1. We should explicitly import types when defining constructors. This
has been allowed for a long time, but we may want to consider removing
it, especially given the new binding semantics which make it more
confusing as in #57290.
2. There were a couple of places where I don't think it was intended for
generic functions in question not to extend Base.