new optimizer: GC-savvy closures

This commit adds support for singleton closures, and for
closure state minimization. The optimizations in question are
intra-program, thus get applied at level -neo:o2 or higher.

  (1) Some anonymous closures depend only on apply() arguments,
      ie they capture no values. In such cases, code is emitted
      that avoids repeated closure allocations by keeping
      (in a static field added to that effect) a singleton-instance
      that is reused.

  (2) Lack of usages of a Late-Closure-Class (eg as a result of
      dead-code elimination) means the closure can be elided,
      along with its endpoint. This may lead to further tree-shaking
      (via UnusedPrivateDetector).

  (3) Minimization of closure-fields (in particular, outer)
      to those actually used. Field removal requires adapting both
      the closure allocation site, and the Late-Closure-Class itself.
      For example, removing the outer-pointer also requires turning
      the closure's endpoint into a static method.
      Closure allocations remain, but with smaller GC overhead.
asm.Type sort constants favored over BType duplicates
disambiguating BType the module from BType the class
reducing the memory footprint of BType
better assertion message, getSuperInterfaces()
more timely Ydebug error reporting in BCodeOptIntra
GenBCode: readability, elidedClasses map
duplication removed in GenBCode's Worker2.visit()
uniquifying BType instances based on their (sort, offset, length)
no more outer pointer in nsc.backend.jvm.BType
nsc.backend.jvm.BType is a custom value class
GenBCode and BCodeOpt: make all numeric coercions explicit

Following the example of a2e8f9e001356a993da4e01235c12583d97163d3
less pressure on GenBCode's BType cache
Level 1 intra-method optimiz: closure-state minimization
more informative name in genLateClosure
styling dclosure endpoints for LambdaMetaFactory