Add new Class type representation

This commit introduces a new Class type representation
and adds initial support for parsing the new types.

Existing uses of Class types are adjusted to compile.
Clean up object init and add support for get-field
Initial work on type-checking class expressions

Add a `class:` macro that adds instrumentation for
the type-checker. Also add type-checking for the
expansion of that macro.
Add unit tests for classes
Check `super-new` calls

Still need to use this information to adjust the class
type init clauses
Add support for override
Add support for local field access
Add infrastructure for private methods

They don't actually work yet, because I don't yet know
how to assign them types for when they're called locally.
Probably requires the two pass approach for locals.
Support tc-expr and not just tc-expr/check

Note: the type is too conservative in some cases with
      tc-expr (if you leave : annotations out). This should
      be fixed in the future.
Type-check class top-level expressions
Fix top-level use of classes
Better class types when no expected type given
Make internal/external names work
Set init arguments as optional correctly
Fix inheritance without expected type
Make sure superclass mandatory inits are provided
Make sure super inits that are provided don't count
Fix bug that triggers due to missing `super-new`
Add support for private methods
Rule out multiple `super-new`