removing utility methods from the GenJVM era
bug fix
Level 1 of the new optimizer: intra-method optimizations

Intra-method optimizations are performed until a fixpoint is reached.
They are grouped somewhat arbitrarily into:
  - collapse a multi-jump chain to target its final destination via a single jump
  - remove unreachable code
  - remove those LabelNodes and LineNumbers that aren't in use
  - replace the last link in a chain of data accesses by a direct access to the chain-start.
  - dead-store elimination
  - remove those (producer, consumer) pairs where the consumer is a DROP and
    the producer has its value consumed only by the DROP in question.
  - nullness propagation
  - constant folding

After the fixpoint has been reached, three more intra-method optimizations are performed just once
(further applications wouldn't reduce any further):
  - eliding box/unbox pairs
  - eliding redundant local vars