Use CPS in the optimizer to deal with PreTransforms.

Instead of having a method
  def pretransformExpr(tree: Tree): PreTransform
which in direct style, we now have a method
  def pretransformExpr(tree: Tree)(
      cont: PreTransform => Tree): Tree
which works in continuation passing style.
Essentially it means: pretransform this tree, and then call
this continuation with the resulting PreTransform. The result
of the continuation is your result.

This allows to make optimistic optimization choices, i.e.,
tryOrRollback, at exactly the right place: the current
continuation is called once in the try part, and, if it fails,
once again in the fallback case. The PreTransforms can contain
a reference to the appropriate cancelFun: since PreTransforms
are only available in the continuations that receive them, and
these continuations have been called with the try part on the
call stack, it is always allowed to call the cancelFun.