Refactor compiler using a result carrying object

This object allows to coerce statements to an expression, if we need to use
them that way, which, with a lisp, is often.

This was collaborative work that has been rebased to make it bisectable.

Helped-by: Paul Tagliamonte <paultag@debian.org>
Helped-by: Julien Danjou <julien@danjou.info>
Do the macro processing in the compiler
mangles kthxbye
Add a test for subscript assignment
Split eval in two steps to allow eval'ing statements

We compile the evaluated operand, separating the body (statements)
from the expression. We then eval() those separately, and return
the evaluated expression.
Add some more eval tests
Remove some unused code
compiler: do not optimize Name

The optimization is wrong; they can't have side effects, but they can
raise errors.

Signed-off-by: Julien Danjou <julien@danjou.info>
Cleanup

Signed-off-by: Julien Danjou <julien@danjou.info>
Add a first test for the compiler

Signed-off-by: Julien Danjou <julien@danjou.info>