Remove function binding for a nice perf boost
Refactor term trees and reflection

Term trees now have everything autogenerated using macros. Using boolean
tags instead of `hasPrototype`, along with function constructors instead
of `Object.create` results in a nice little speed boost.
Only resolve when absolutely necessary

Many calls to `resolve` are not necessary. Most of the time we only want
to resolve when something is a macro, but if there's no possibility of
it being a macro, we can avoid an expensive call to resolve.

This PR adds an additional map to the env that stores unresolved names
of the things in the env. That way, we can check if it *might* be
a macro, and only then call `resolve`.
Micro optimizations for some hot functions
Allow multi-token macro names to be exported
Merge branch 'pr/303'
build
Merge branch 'pr/306'
build