cleanup
feedback (in progress)

- generalize optimalBoundPhase to any monad
- clean up use of private constructors, and handle the non-let/free
cases the same way
- working on converting the other phases
get rid of seq()/unseq()