stdlib: Implement (even?), (odd?)

These are required for the (letrec-syntax) example in R7RS
Implement (letrec-syntax), (let-syntax) as macros

The previous compiler-based implementation of (let-syntax) didn't
properly rescope its pattern. This implements (letrec-syntax) as a
simple macro and implements (let-syntax) as an alias for that.
compiler: Expand syntax tree list helpers

- Add ast.AnyList extractor that will extract both proper and improper
  lists

- Move the ast.ImproperList contructor to ast.AnyList as it can actually
  construct a proper list if it's passed an ast.EmptyList as its
  terminator

- Add sst.ScopedAnyList and constructors for sst.ScopedImproperList and
  sst.ScopedProperList
compiler: Third macro rewrite

This effectively rewrites the macro engine again to support nested
subpatterns

- Move all frontend macro support in to a new compiler.frontend.syntax
  package. "macro" is now a keyword in Scala so "syntax" is used instead

- Factor our findPatternVariables in to its own file and make it build a
  proper hierarchy of subpatterns

- Preserve the found pattern variables inside the SyntaxRule so pattern
  variables need to be re-scanned on every expansion

- Change matchPattern to use the new hierarchical pattern variable
  structure and produce a new hierarchical output called MatchedData

- When expanding a subtemplate scan each possible matched subpattern to
  find out which subpattern the subtemplate is referencing. Expand the
  subtemplate for each matched instance of the subpattern.

- Support improper lists matching a longer list. This allows "rest"
  style operands in patterns

- Allow improper lists to be applied as syntax. This seems strange but
  is needed for the (case-lambda) macro defined in R7RS to work
  correctly.
stdlib: Implement (do)

This uses the definition of (do) directly from R7RS. It requires the
last macro rewrite to work correctly.
stdlib: Implement (case-lambda)

The test and macro definition are taken directly from R7RS