Optimizing class inliner to favor kotlin j-/k-style lambdas.

We add an analysis of how method parameters are being used. Currently
we only identify parameters that are not used, and parameters that
are only used for calling a method on it exactly one time.

(Note that the latter pattern is typical for lambdas passed into a
method which calls them in some context.)

With this information we extend class inliner to allow the eligible
instance to be passed as an argument to a method (extra method below)
and we know that the corresponding parameter is used in one of the
two supported special ways. If it is, we:

 ** if the eligible instance is passed to an unused parameter of the
    extra method and the eligible instance can be inlined without this
    use, we just replace this use with null and proceed with eligible
    instance inlining

 ** if the eligible instance is passed to a parameter of the extra
    method with one call on it, we look if this call will become an
    eligible use after the extra method is inlined, and if it is we
    try to force-inline extra method and proceed with eligible
    instance inlining after that. (Note that extra method size
    contributes to combined inlined instructions size).

NOTE: unfortunately I had to restructure ClassInliner since it was
getting more complicated, this will make review more difficult. Those
are mostly class and method moves/renames and trivial changes.

We have just few instances where new patterns were applied on gmscore,
totalling to about 1K size reduce.

Bug: 80135467
Change-Id: I8fc747b80bd4846a1227c6bdbb064b563dd89419
diff --git a/src/test/kotlinR8TestResources/class_inliner_lambda_j_style/SamIface.java b/src/test/kotlinR8TestResources/class_inliner_lambda_j_style/SamIface.java
index bccef3e..db0e940 100644
--- a/src/test/kotlinR8TestResources/class_inliner_lambda_j_style/SamIface.java
+++ b/src/test/kotlinR8TestResources/class_inliner_lambda_j_style/SamIface.java
@@ -13,8 +13,8 @@
     }
 
     public static void consumeBig(SamIface iface) {
-      System.out.println("Bigger than inline limit, class name: " + iface.getClass().getName());
-      System.out.println("Bigger than inline limit, result: '" + iface.foo() + "'");
+      System.out.println("Bigger than inline limit, class name: " + Consumer.class.getName());
+      System.out.println("Bigger than inline limit, result: '" + SamIface.class.getName() + "'");
       consume(iface);
     }
   }