Create Evaluator, a class for handling evaluation

Evaluators create generators that yield actions telling the stack-based
evaluation function what to do. It can request further evalution, or it can
return a result. If further evaluation is requested, a new stack frame is
created, and its result fed back into the generator. If a return action is
encountered, the result is returned to the parent frame.

This new generator-based approach is an elegant way to handle the dichotomy
between having a reusable approach to evaluating built-in and Python-method
functions and macros, and allowing evaluation to be paused to get intermediate
results (during argument evaluation, for example).