Fixes for matching syntax literals

- If an operand is a literal but the pattern isn't fail the match

- If an operand is bound but a literal isn't (or vice versa) fail the
  match
Include the macro location when expanding macros

This isn't exhaustive and we should be including the location the macro
was expanded from. This is better than nothing, however
Deal with nesting results from outside the step

An example of this would be:

(define out 5)
(if #t out)

"out" should be considered an input value
Add (cond) and (case) support

These macros are identical to the example definitions in R7RS. These are
useful because they appear frequently in R7RS examples and are a good
litmus test for macro parsing and other compiler features.
Implement complex?, finite?, infinite?, nan?
Implement =, <, >, <= and >=

This is implemented as a common numericCompare() template function
that's shared between each implementation. An integer and double
comparator is passed in with the compared arguments and a boolean is
returned.

This follows the R7RS recommendation of attempting to convert the values
to exact integers before falling back to IEEE floats. This means the
implementation is quite complex.
Simplify character parsing

The existing parsing put all the character handling inline with with the
main parser which caused a lot of backtracking. It also had complex
rules to satisfy R7RS that can be described more succinctly as "single
character or recognized identifier".

This makes our raw Scheme parsing 10-15% faster and our unit tests ~5%
faster.
Startup the LLVM toolchain early

Startup the llvm/llc/clang++ toolchain early in the processing of the
input file.  This allows them to startup while their LLVM IR input is
being prepared.  This is marginally less efficient when the compile will
error out but it makes the unit tests ~8% faster.
Cache result of loading files in IncludeLoader

This caches either the absence of an input file or its parsed data. This
prevent us from reading and parsing (scheme base) over and over during
unit tests. The result is approximately halving the time the compiler
unit tests take to run.
Add datum_unchecked_cast<>

This is the same as static_assert<> in release builds but in debug
builds this will verify the actual type to ensure the cast makes sense.

This required changes to ProperList which was casting its head to
PairCell even when it's an EmptyListCell. This change in combination
with datum_unchecked_cast<> should automatically detect running past the
end of a proper list