Use a more concise pattern match for checking wide operations
Fix a bug triggered by dead code elimination

We eliminate some dead code (unreachable exception handling blocks)
since eliminating them is, in many ways, easier than keeping them
around.

Some of the labeling and SSA translation code was making bad assumptions
about where dead code could actually be eliminated from.  Now dead code
can be eliminated from anywhere in the instruction stream.  As a bonus,
the refactoring required to fix this bug also simplified basic block
traversal in the SSA translation step.

More detail: we need to know the index into the instruction stream of
each instruction at SSA translation time (mostly because the low-level
Dalvik Instruction type doesn't have identity so we can't use it as a
Map key by itself - the index is required to distinguish them).  Prior
to this commit, we were recomputing the ID while we translated to SSA
form by keeping a running count of how many instructions we have seen.
This breaks if dead code is eliminated from the *middle* of the
instruction stream.  This situation isn't common, but it happens.  This
was manifesting as incorrect translation and some infinite loops
before (because the CFG was wrong).

The fix was to just record the index of the first instruction of each
BasicBlock.
Enable -rtsopts for generated binaries