Const checker

This refactors how we build the scopes and then implements a check that validates that we are not mutating const bindings.

Fixes #18
We could have ScopeVisitor with enter/exit and extend it with ScopeChainer that pushs on enter and pops on exit.  Then we don't need this comment and the one in ConstChecker warning about hacking the push/pop.