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
I'm not sure 'asString' adds much value. The spec uses the term StringValue which is clearly very vague. I'm keeping as is for now.