add stack implementation
convert Eval into stack-aware Eval2

Eval2 must not be called recursively (hence the rename)
Once no callers of the old Eval exist, we might rename Eval2 back to
Eval