The word of the night is: symbols
Created a basic symbol table that supports proper scoping of identifiers
Finally parse the entire program before evaluating it

There are many "big things" to do, but figuring out how to pass the global symbol table into the AST evaluation (before forcing functions, and with functions, scoping blocks) is up there.

Might be best to just hack it into BaseNode for now (and set the pointer to the symbol table for each statement) and then fix it up once I add proper blocks.