have utility show phase level -1 bindings too
remove gotos to next statement
remove labels that have no jumps
CxxLabel -> CxxLabelDef, and declare CxxLabel view
use CxxLabel view to simplify code
do copy propagation on function bodies

with the goal of removing some assignments to temporaries
introduced by earlier transformations
stateful-all-rw-term
switch to functional update of state for copy propagation

using stateful-all-rw-term for generic traversal
fix to cxx->pp
drop empty BlockStats in statement containers
remove unreferenced variables

i.e., uninitialized variables that are not referenced
in function body
add some tests focused on testing copy propagation
fix bug in IfExpr lifting

would sometimes put IfStat in expr context

add test case for the above fix

also, fix bug in copy propagation, would in same cases fail to
backtrack a failed attempt to copy propagate
switch primarily to a splicing "block" statement in the IR

only for C++ do we need some actual {} blocks, which can be
inserted as required towards the end of translation

now SeqStat is a (splicing) statement sequence,
and CxxBlockStat is a C++ {} block

this results in shorter, cleaner code, and also addresses
the issue of copy propagation sometimes propagating variables
beyond their static scope