refactored lexer to be tail-recursive
remove `top` function
added debug logging
reword grammar to match code
added show for asts
fix bug in precedence of mul over add
fixed associativity bug

I think production of the form E' -> + T E', while maybe theoretically
equivalent to E' -> + E, make it harder to implement left
associativity correctly.

With productions like the first, it's possible to get the right hand
side of + (and other ops) and create the + node before moving on,
instead of waiting for the E to return a node in the second prod.
Merge imperative into master, discard functional version