Add type checking to the pipeline
Add a-proven annotation variant.
Add a visitor for type checking which does nothing
Add Basic dataype for types
type-check doesn't use visitor pattern and errors out.

After some discussion with Ben, we have decided to not use the visitor
pattern in the type-checker. Additionally, the type checker will just
error out for now, indicating what part of the AST it has failed on.
Add s-check-expr and rename a-proven to a-checked.

The AST now has a variant s-check-expr which checks that some expression
has the type that we claim it does. Also, a-proven has been renamed to
be a-checked, which is more in line with what's happening.
Start implementing bidirectional type checker.

For now, the type checker will just simply return 'yes' or 'no'. Once
it is working, we can worry about filling in the AST and providing more
information about type errors.

When compiling any tests, make sure to use the '-library' flag at the
very end of the command, to avoid adding in extra things that are not
yet handled.
Handle key lookup failures; add default environment.

Identifiers are first checked for in the string dictionary, and then
they are either fetched or an exception is raised. Additionally, there
is now a default environment in which we can place things that are
always in scope.
Add support for lambdas and application.

Lambdas and application are now supported for synthesis and checking.
Additionally, tc-info now has an errors field for logging errors.
Add some tests for type checker (run by hand for now).

There are now some tests for the type checker that can be run by hand,
to see if compilation succeeds or fails. One of the bad ones passes for
the moment. This will no longer be a problem once we start recording
type errors.
Add methods to convert Types to strings and fetch location.
Add on-left() and on-right() methods to Pair.
Add new CompileError for bad types.
Type checker now returns an AST and logs errors.

The type checker will now return a new AST that will eventually contain
extra type information. Errors that are discovered during type checking
are also logged and displayed at the end.
Test that multiple type errors are printed.
Small reformat for better line length
Support s-if-else, s-prim-app and fix s-letrec.

s-letrec couldn't handle actually handle recursive functions before.
There are now tests to make sure recursive and mutually recursive
functions are supported and type-check correctly.
s-when, s-for, s-paren raise error cause they are previously desugared
Change immediately called thunk to block
Reduce line length with args for synthesis-fun