Added EBNF for let expression.
Changed nodes to use let bindings instead.
Allow functions to use let bindings.
Fixed macros slightly. Had them restricted to expressions. Should still formalize how the substitutions work (mostly the arguments are an issue).