Whitespace
Fix a subtle bug in trivial phi elimination

We are maintaining the mapping that records which basic blocks each
incoming phi value came from separately from the list of phi operands.
This makes trivial phi elimination easier.  Before this change, this
incoming block mapping was not being updated when a trivial phi was
removed.  This left a dangling reference that manifest as a failed map
lookup (and failure) later.

Now we are correctly replacing these phis.
Don't include empty (eliminated) phi nodes in the Labeling

We were rendering lots of unreferenced dead nodes before.  This is
basically just cosmetic.
Record BasicBlock predecessors and successors

Other IRs leave these implicit and build up a CFG in another pass.  I
don't see any reason to do that here since we already have the
information.  Keep it around so we don't need to re-compute it later.
Space out pretty printed methods for easier reading
Another minor spacing improvement in the pretty printer
Add a few test cases that had tripped up the SSA conversion
Indentation
Fix a bug in handling wide arguments to invokes

This was a crashing bug.  Wide values (longs and doubles) occupy two
registers.  Instructions refer to wide values by the first register in
the pair.  Except Invoke instructions.  Both registers for a wide
argument are explicitly passed to invoke instructions.

The code was trying to translate the second register using
getFinalValue, but we never create values for the second register (by
design).  The fix is to just drop the second register from each wide
pair from the argument list before translating it.
Let the SSADumper driver read any type of reasonable input file
Pretty printer tweaks
A bit more documentation and some useful helpers
Add an interesting regression test for a bug fix about to be checked in
Fix a bug in insnCodeUnits

This broke when I fixed the decoding of array data.  The code unit count
was being derived from the old [Word16] payload in each payload
instruction.  When I changed the types of these payloads, the counts
were off.  This caused errors in the SSA translation process since the
code checking the payload instruction could get the wrong offset into
the instruction stream and find an invalid payload.

The switch payloads were also affected and fixed in this change.
Fix another bug in handling wide values

This one only seems to occur in larger methods where virtual registers
are reused.  Instructions that produce a result and operate on wide
registers actually clobber the named destination register and the one
after it.  We were only accounting for the named destination register,
leaving dangling labels in the register map.  These dangling labels were
incorrectly ending up in phi nodes and causing crashes when we tried to
translate them.

This change modifies the labeling code to clobber wide registers when
necessary.  It also re-uses the wide argument filtering code from the
other step of the SSA translation.  This way we don't assign invalid
labels to the second half of a wide register pair.
Cannot math...

Accidentally divided when I meant to multiply.  Each Int32 is two code
units, not half of one.  Oops.
Fix try block range calculation

Try blocks are marked by a start offset into the vector of shorts and a
number of short units covered by the block.  The old method of
determining the actual instructions covered had problems with boundary
conditions.  Doing it properly requires a bit more care, and this patch
does so with a scan from the start, taking into account all of the
instruction 'short' units correctly.

This uncovered a bug in the test suite where I was expecting a possible
exception, but apparently the compiler guarantees there cannot be one
there.  Disabled that test since it isn't right.
Not all classes have a source file name

We were unconditionally trying to get a name for class source files.  We
might want a more uniform strategy for dealing with missing names..