Add support for implicit recursive types & mutually recursive types

This pull request adds support to Typed Racket for implicitly declared recursive types and mutually recursive types. That is, you can declare a pair of recursive types like:

    (define-type (Even A) (U Null (Pairof A (Odd A))))
    (define-type (Odd A) (Pairof A (Even A)))

Note that no `Rec` is needed.

I'm submitting this as a pull request to get some code review before the initial push. I'd appreciate any comments.

Design notes: ordinary non-recursive type aliases should work exactly as before, except that they are topologically sorted and do not use the resolution mechanism built into the environment (it may be possible to remove that later). The types for implicit recursive types are not used unless a recursive reference is detected during type parsing.