dry up classes
add util.errorWithNode method that returns an error with mapped location properties
implement constants
hoist var declarations to before function definition when let block scoping