Threading environment through everything.

The env is immutable now. To "get from one expression to another"
eval has to return the new environment along with the value. This is
like in functional programming when you return the new "world."

Split apart the exp, env, and store. Perhaps there is an elegant
grouping of them, but that's unclear right now. Still bothering me is
that a global mutable object, the store, gets threaded through some
things but not others.

Also added a print-debug macro.
Eval-if works!
Define works!
Y works!
SetBANG...works!