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
Yes, that is what I was thinking when I mentioned enter/exit.