threading an expander context object

Using an expander context object throughout the expander instead of
passing individual parameters. Allows easier extension (especially
across macro transformer calls).
threading context into macro transformer
adding mark to expander context
build
using context mark in syntaxCase
build
massive speedup in resolve #90

In the expansion case of function definitions we
were applying renames from the definition context
to the entire function body. This was causing a
slowdown in `resolve` because it was following both
those renames and the renames found by opening
the definition context in each syntax object.

This commit solves this by not applying a renaming
operation at the end of function expansion. Instead
all the renaming context are found by opening up
the definition context inside of `resolve`.

This required restructuring the expansion of function
definitions slightly. The function body is now no
longer being expanded all at once. Instead it must be
run through `expandToTermTrees` and then have the
definition context applied to the result before finishing
with `expandTermTreeToFinal`. Required due to interaction
of hygiene and nested function definitions.
build