[IR] Bug fix in OptimizeTempVarsPass (returns & ensure interaction)

* Ensure blocks break the control flow of a "return <expr>"
  that are captured by a ensure block. Normally, this would become
  "%t = <expr>; return %t" in IR. However, with ensures, there is
  a detour through the ensure block in between as follows:
  "%t = <expr>; process-ensure-code; return %t"

  So, OptimizeTempVarsPass cannot terminate the live-range of
  %t at the "return %t". This patch fixes that pass to extend
  the live-range of %t till the end of the exception region.

  Added a FIXME in the code for a potential tweak to the code
  in future.

* This fix eliminates a whole bunch of mspec failures where the
  return value was being clobbered in the ensure block because
  of the buggy optimization.

  Now down to 13 failures & 3 errors