Reduce memory usage when assigning registers in a block.

Rather than pre-calculating liveness states and then processing nodes
in execution order, we process nodes in reverse execution order and
use the liveness info implicit in this traversal.  Names are assigned
a register when they're used for the first time, and the register is
freed when we reach an assignment.
Add dedicated testcases for registerizeHarder pass.
Simplify handling of switch statements in registerizeHarder.

It now assumes they're of the very restricted for that's actually
produced by emscripten, which both simplified the code and uncovered
opportunities for further register reduction in a testcase.
Add TODO about more permissive label handling in registerizeHarder
Merge pull request #2046 from rfk/rfk/registerize-harder-followups

Some follow-up fixes to registerizeHarder