Replace term as intermediate representation with HOAS ExecVal.

This fixes scope issues and makes it easier to control precisely when things
are evaluated.
Better laziness behavior, still a bit off with IO