Mangle/hoist ifs without creating temporary functions

This pair of commits allow us to hoist nested ifs without creating temporary functions

To do so, it implements a "do-setv" keyword that, instead of returning, sets a variable to the result of the last expression (or none if the last thing is not an expression)

It then mangles the nested ifs to use do-setv on a temporary variable.

This addresses #118.