Make $*LEVEL in optimizer an attribute.

Saves a bunch of contextual lookups.
Avoid duplicating QAST::Node.unique(...) logic.
Toss a JVM-only optimization.

It's covered by the much more general lexical-to-local lowering, which
we should just make work on the JVM.
Bring in var tracking code from NQP's optimizer.

Will need various tweaks and extensions for use with full-blown Perl
6, but it'll provide a known-good starting point.
Break optimizer up into a few classes.

Having it as a single 1,200-line class was already getting hard to
manage, so before adding more to it start breaking a few things out.
This breaks symbol handling and junction optimization out into two
separate classes.
Break error/warning reports out of main optimizer.
Start bringing in variable decl/use tracking.
Immediate blocks don't need a $*DISPATCHER.

This also saves the takedispatcher instruction in all of them. Adds up
34KB saving on CORE.setting.moarvm, and a some thousands less QAST
nodes during compilation. Also means less instructions to execute at
runtime.
Don't make container if we immediately bind a var.

For example, in `my $a := 42;`, the container would be immediately
discarded, so don't bother allocating it at all.
Make use of PseudoStash poison lowers.

Not trying to do any of them yet, but this will be needed before we
safely can.
Further analysis to prepare for variable opts.

Track EVAL, getlexouter, and calls.
Eliminate $! and $/ when trivially unused.

Where "trivially unused" holds in many of the simple operators in the
setting. This saves two Scalar allocations for many of them.
Optimize away $_ when it's trivially unused.

This includes optimizing away the getlexouter and bind instructions
that go with it.
NQP bump for Moar improvements.