Replace jump table dictionary with Forms object and register decorator
Implementing tail-call optimization

Instead of having eval and apply call each other recursively, when a function
is applied the environment is modified, and the function body replaces the
current expression. Special forms that are tail-recursive return a Thunk
containing the expression to replace the current one. Other forms just return
immediately. New tests.