Java 21 [#96932](https://github.com/elastic/elasticsearch/pull/96932) (`-Druntime.java=21`) breaks `java.util.List` lookups in Painless scripts.

```
invalid foreach loop: method [java.util.List, iterator/0] not found
member method [java.util.List, add/1] not found
member method [java.util.List, asCollection/0] not found
member method [java.util.List, asList/0] not found
member method [java.util.List, isEmpty/0] not found
member method [java.util.List, size/0] not found
member method [java.util.List, stream/0] not found
```

`:modules:lang-painless:test` (57 failures): https://gradle-enterprise.elastic.co/s/dkpi5pcitruwy
`:modules:lang-painless:yamlRestTest` (6 failures) https://gradle-enterprise.elastic.co/s/rsf3522r44ilc

```
java -version
openjdk version "21-ea" 2023-09-19
OpenJDK Runtime Environment (build 21-ea+27-2343)
OpenJDK 64-Bit Server VM (build 21-ea+27-2343, mixed mode, sharing)
```

Refs: https://github.com/elastic/elasticsearch/issues/96997
modules/lang-painless/src/main/java/org/elasticsearch/painless/lookup/PainlessLookup.java
return lookupPainlessObject(originalTargetClass, objectLookup);
    }
    public MethodHandle lookupRuntimeGetterMethodHandle(Class<?> originalTargetClass, String getterName) {
        Objects.requireNonNull(originalTargetClass);
        Objects.requireNonNull(getterName);
        Function<PainlessClass, MethodHandle> objectLookup = targetPainlessClass -> targetPainlessClass.getterMethodHandles.get(getterName);
        return lookupPainlessObject(originalTargetClass, objectLookup);
    }
    public MethodHandle lookupRuntimeSetterMethodHandle(Class<?> originalTargetClass, String setterName) {
        Objects.requireNonNull(originalTargetClass);
        Objects.requireNonNull(setterName);
        Function<PainlessClass, MethodHandle> objectLookup = targetPainlessClass -> targetPainlessClass.setterMethodHandles.get(setterName);
        return lookupPainlessObject(originalTargetClass, objectLookup);
    }
    private <T> T lookupPainlessObject(Class<?> originalTargetClass, Function<PainlessClass, T> objectLookup) {
        Objects.requireNonNull(originalTargetClass);
        Objects.requireNonNull(objectLookup);
        Class<?> currentTargetClass = originalTargetClass;
        while (currentTargetClass != null) {
            PainlessClass targetPainlessClass = classesToPainlessClasses.get(currentTargetClass);
            if (targetPainlessClass != null) {
                T painlessObject = objectLookup.apply(targetPainlessClass);
                if (painlessObject != null) {
                    return painlessObject;
                }
            }
            currentTargetClass = currentTargetClass.getSuperclass();
        }
        if (originalTargetClass.isInterface()) {
            PainlessClass targetPainlessClass = classesToPainlessClasses.get(Object.class);