Add support for non-hygienic macros

Add support for macros. This is done by implementing a seperate expand
step during parsing before the code gets evaluated. A lot of the logic
which previously resided in the evaluate step have been moved into the
expand step.