Don't use recursion for evaluation.

Using recursion during evaluation is a problem. A recursive program (or deeply nested program) may cause a stack overflow in the interpreter. It prevents us adding TCO later. We cannot allow users to change the Trifle stack size, as allowing a large stack may cause a stack overflow in the interpreter. Worse, adding an intermediate function may change how much stack the interpreter uses, reducing the amount of recursion a Trifle program may use!

This pull requests rewrites almost all built-ins to use a while loop and an explicit stack object. The only built-ins that still use recursion are `quote` (which will be rewritten as a Trifle macro) and macro expansion (since we currently have first class macros, but this will change).

No tests have been changed (though a few have been added).