squash outer pointer of Late-Closure-Classes

During UnCurry, closureConversionModern() lowers a Function node into a Block of the form:

   {
     def hoisted(x_1: T_1, ..., x_N: T_n): R = body

     hoisted(zeroes-for-params-above).asInstanceOf[AbstractFunctionN[T_1, .., T_N, R]]
   }

The "hoisted" method usually becomes a bytecode-level instance-method,
unless the class declaring it is an implementation-class.

An instance "hoisted" method usually implies that an outer-pointer is required by the anon-closure-class
(unless the class declaring the "hoisted method" is a Scala-level static module,
in which case the anon-closure knows how to grab the correct instance via GETSTATIC MODULE$ thus doing without an outer-pointer)

Oftentimes an instance "hoisted method" actually does not dependen on THIS,
or depends only on lifted-methods (thus not part of the public API) which themselves exhibit such property
(not depend on THIS or depend only on methods that don't actually require THIS).

In class LCCOuterSquasher, method squashOuterForLCC() detects the largest subset of "hoisted methods" (aka endpoints) that can be made static,
under the constraint that only lifted-methods can be made static. This constraint amounts to leaving the public API unchanged.

Once that subset has been determined, all usages of those "must-be-made-static" methods are found, and rewritten as appropriate.
Finally, each Late-Closure-Class amenable to this transformation is refactored:
  - its $outer field is removed,
  - its constructor is adapted to remove the param for the outer-pointer.

Compiler flag -Ylog:jvm informs which anon-closures have their outer-pointer squashed.