Create and use a-type-var annotation.

There is now an a-type-var annotation to mark type variable usages.
Previously, they were just converted to a-blank which meant that the
type checker couldn't see where the programmer had used declared type
variables. They are made a-type-var instead of a-name so that they can
easily be replaced with "Any" before JavaScript is emitted, like a-blank
is.
Add forall field to t-arrow and add t-var.

Instead of having a general t-forall variant, we will instead have a
field on t-arrow that introduces its type variables. We also now have a
t-var variant which takes advantage of the passed-thru a-type-var.

Type now has:
  - a _lessthan method so that types can be placed in a Set.
  - a substitute method so that types (like t-var) can be replaced
    easily

For now, the type checker will error out when two lists that should be
equal in length (such as argument types) aren't.

Finally, more builtin functions that are created by the desugarer are
handled.
Move code related only to types into its own file.

Code that is specific to types and might be needed by other modules
should be placed in its own file. This will allow other modules to
reference the Type datatype without also importing the synthesis and
checking specific code.
Handle some parameterized types.

Some parameterized types type check right now (for example, see
tests/type-check/good/id.arr), but there are still some issues with
handling higher-order procedures.