### Elasticsearch Version

8.7.0

### Problem Description

If a search template changes the default mustache delimiter using `{{=`, rendering the template will fail with a `MustacheException`, `Disallowed: changing defaul delimiters`.



### Steps to Reproduce

```
PUT _scripts/test_search_template
{
  "script": {
    "lang": "mustache",
    "source": """
    {
      "query": {
        "match": {
          "content": "{{query_string}}"
        }
      },
      "highlight": {
        {{=<% %>=}}
        "pre_tags": [
          "{{{{"
        ],
        "post_tags": [
          "}}}}"
        ],
        <%={{ }}=%>
        "fields": {
          "content": {},
          "title": {}
        }
      }
    }
    """
  }
}
```

```
POST _render/template
{
  "id": "test_search_template",
  "params": {
    "query_string": "test"
  }
}
```

Result:
```
{
  "error": {
    "root_cause": [
      {
        "type": "script_exception",
        "reason": "Disallowed: changing defaul delimiters",
        "script_stack": [],
        "script": """
    {
      "query": {
        "match": {
          "content": "{{query_string}}"
        }
      },
      "highlight": {
        {{=<% %>=}}
        "pre_tags": [
          "{{{{"
        ],
        "post_tags": [
          "}}}}"
        ],
        <%={{ }}=%>
        "fields": {
          "content": {},
          "title": {}
        }
      }
    }
    """,
        "lang": "mustache"
      }
    ],
    "type": "script_exception",
    "reason": "Disallowed: changing defaul delimiters",
    "script_stack": [],
    "script": """
    {
      "query": {
        "match": {
          "content": "{{query_string}}"
        }
      },
      "highlight": {
        {{=<% %>=}}
        "pre_tags": [
          "{{{{"
        ],
        "post_tags": [
          "}}}}"
        ],
        <%={{ }}=%>
        "fields": {
          "content": {},
          "title": {}
        }
      }
    }
    """,
    "lang": "mustache",
    "caused_by": {
      "type": "mustache_exception",
      "reason": "Disallowed: changing defaul delimiters"
    }
  },
  "status": 400
}
```

This was changed when switching to `SafeMustacheFactory` in https://github.com/elastic/elasticsearch/pull/92211 which sets [`allowChangingDelimeters`](https://github.com/spullara/mustache.java/blob/c17bb110161848e444576e93170a2a696770e9d3/compiler/src/main/java/com/github/mustachejava/SafeMustacheFactory.java#L82) to `false`.
modules/lang-mustache/src/main/java/org/elasticsearch/script/mustache/CustomReflectionObjectHandler.java
return null;
        }
        if (object.getClass().isArray()) {
            return new ArrayMap(object);
        } else if (object instanceof Collection) {
            @SuppressWarnings("unchecked")
            Collection<Object> collection = (Collection<Object>) object;
            return new CollectionMap(collection);
        } else {
            return super.coerce(object);
        }
    }
    @Override
    @SuppressWarnings("rawtypes")
    protected AccessibleObject findMember(Class sClass, String name) {
        /*
         * overriding findMember from BaseObjectHandler (our superclass's superclass) to always return null.
         *
         * if you trace findMember there, you'll see that it always either returns null or invokes the getMethod
         * or getField methods of that class. the last thing that getMethod and getField do is call 'setAccessible'
         * but we don't have java.lang.reflect.ReflectPermission/suppressAccessChecks so that will always throw an
         * exception.
         *
         * that is, with the permissions we're running with, it would always return null ('not found!') or throw
         * an exception ('found, but you cannot do this!') -- so by overriding to null we're effectively saying
         * "you will never find success going down this path, so don't bother trying"
         */
        return null;
    }
    static final class ArrayMap extends AbstractMap<Object, Object> implements Iterable<Object> {