Refactor nodes support.

This change makes the separation between parsing and execution cleaner.
The parser now generates a data structure, while the runtime takes care
of the full execution. Node is now a dumb structure instead of being in
between parsing and execution, which was leading to dependency problems.
This also enable the move of the Eval logic to the Context, where it
belongs.

Nodes do not use Go type system anymore to differentiate between types
nodes (expressions, integers, ...) and instead do things manually when
needed. While it was nice to leverage the Go type, there was not a lot
of places where it was useful - beside returning the type and a string
representation. All the rest is either common between node type or
managed by the lexer anyway. Overall, it seems to make the code shorter
and cleaner.