Significant changes to how typechecking of generic types are done.
There is now an intermediate step where only extends and implements are
instantiated.

Other updates were made to how method parameters are added.  They're now
based on the method type, not the formal parameters from the AST.

Although this typechecking approach seems more powerful, several pieces
of functionality were broken along the way.  Exceptions and interfaces
are problematic.