* Refactor the semantic analyzer to use the new state struct
which is just bunch of refs to the current ns and current env
* Add the `environments` vector to ns to store the environments
and few helper functions to use it
* Add the `symbolList` (need a better name) to keep track of what
symbols might be added to the namespace after calling `addTree`.