Add native function decl parsing

This is based on a slightly reworked version of the Llispy version. One
difference is the type names more cloesly reflect C/LLVM conventions
than Scheme conventions. Hopefully this will make it more obvious what
the native-function signature for a given C function is
Add define-report-procedure

This allows us to hint the compiler/REPL that certain procedures have
the exact semantics defined in R7RS
Add SchemeType

This is a collection of case objects representing all implemented Scheme
types. This will be used later for data flow analysis
Allow ambiguous syntax rules

It seems that Scheme follows the standard pattern matching practice of
using the first matching pattern. Switch our logic and add a test
Support and test for self-executing lambdas

The expression tree structure was completely wrong here. Allow executing
any expression as a lambda, not only bound values
Allow repeating subpatterns besides identifiers

This is required to support the (let) macro defined in R7RS
Fix zero or more match with zero matches

The support for arbitrary subpatterns broke a zero or more match that
matched zero times. Add ugly work around and two new unit tests.