Big separation of functionality, to facilitate adding features.

Some tests are broken, since the constant propagation does not work.
Moved modules and tests to sub-packages
Draft expression evaluator and changed GenSym interface
Removed a redundant classifier
Added the draft of a CFG builder and some tests for it
Draft of the constant folding algorithm and a test stub for it

Does not quite work yet.
core/expression: bundled peval_expression() returns into a single structure
core/expression: fixed GenSym call
[broken] components/fold: shaping the API
Added a walker class to replace ast.Visitor and ast.NodeTransformer
core/walker: added support for a dispatcher object as a callback
core/walker: checking for ignored node mutation during inspect(), walking the fields of a changed node
core/symbol_finder: using the new Walker
components/eliminate: using the new Walker
components/while_remover: using the new Walker
components/var_simplifier: using the new Walker (need to add the custom context support)
core/walker: added global context support
components/var_simplifier: fixed Walker usage
core/walker: added prepend functionality
core/mangler, components/inline: using the new Walker