Build type displaynames outside-in.

Previously we were visiting the inner types first and then naming the
outer type, causing the auto-assigned placeholder letters to be assigned
backwards: U<T>.

Now we'll assign the outer name first, so that the letters increase from
left to right as expected: T<U>.
A more helpful repr() for types.

Including the type name in the repr is useful for debugging.
Recursively normalize types during inference.

Previously we were correctly normalizing the outermost type when an
equivalence was detected for it, but we weren't visiting any type args of
the type and normalizing those.

Now we will normalize the type arguments too, producing a fully-normalized
result type.
Consider non-type values to never equal a type.