MethodHandles: change asType() / invoke() implementation

This CL changes how we deal with non-exact invokes and asType().

Specifically:

1. It drops the concept of `nominalType` from our implementation and
   adds an AsTypeAdapter transformer for performing pairwise
   conversions. This means asType() conversions are orthogonal to other
   transforms and easier to reason about.

2. It switches to use the asTypeCache to reduce the cost of non-exact
   invokes.

3. It adds MethodType::IsInPlaceConvertible in the fast-path for
   MethodHandle.invoke() to avoid an asTypeAdapter transformer when the
   required conversions can be performed in-place with no-ops. This is
   possible because the ShadowFrame deals in 32-bit vregs so
   conversions like byte -> int are no-ops.

Bug: 207844518
Test: art/test.py --host
Test: atest CtsLibcoreTestCases

Change-Id: I2faf260b164767104c7ae0bc061fbf4f6579bbff
12 files changed