[IR] Experimental: First pass implementing unboxing of floats.

* Added a pass to detect unboxable floating-point operations
  and perform them with Java primitives directly without
  incurring call overheads.
* This code doesn't yet add inlining/type guards for dealing
  with monkeypatching or type changes along optimized paths.
* Added -Xir.unboxing=true commandline option for enabling
  the pass.
* This code hasn't been tested extensively for correctness or
  performance, but it is meant to be correct (modulo missing
  type guards). It should work in the presence of closures by
  adding any required boxing/unboxing instructions at boundaries.
* Added support for float ALU, box, and unboxing instructions
  in IR JIT as well.
* Analysis now works correctly on loop-based and closure-based
  versions of mandelbrot (type-guards are still missing). Some
  more tweaks are required for the closure version to get rid of
  some spurious boxing instructions.
* Preliminary results:
  - Over 5x speedup with JIT on the while-loop version of mandelbrot
    (all fixnum ops still go through boxed calls).
  - Over 20% speedup with interpreter on the closures version of
    mandelbrot (when DCE is enabled). JIT doesn't support closures
    yet.
  - But, meaningless numbers in the absence of safety guards, but
    just an indication of potential in fp-heavy code.
* To be done:
  - Additional tweaks to analysis.
  - Retain exception edge info better in IR and exploit it in
    analysis.
  - Fix ToAryInstr to not lose information about safety in most
    cases where its operand is an Array.
  - Exploit Fixnum information where it is obvious it won't
    overflow boundaries (ex: 50.times {..})
  - Exploit inlining opportunities on simple iterators like
    (n.times {..}).
  - Exploit information from Constants and Math.* methods.
  - A lot of this requires appropriately placed safety guards.