Add recursive type alias support to TR

This expands the `Name` type functionality to go
beyond struct names and allows arbitrary recursive
type aliases to use the environment for indirection.

In addition, such aliases can be mutually recursive.
Add static contracts for instanceof
Make printing of `Name` types unfold correctly
Add type annotations for GUI libraries

The types for racket/gui are substantially complete, but
there are still some missing classes and methods.

Some interesting future work would be to ensure type coverage
by comparing the class members vs. the types in the environment.
That could be run as a test to ensure it stays up to date.

Most types for the framework library are still missing.