Percolator: Reuse IndexFieldData instances between percolator queries

This is an improvement that came out of #6806. 

Instead of each percolator query having its own IndexFieldData instance, it is better to reuse the same instance between percolator queries. For example in case when many percolator queries use the same `geo_distance` filter, this can improve percolator query indexing and percolating document execution speed.
This effectivly means there is only one field loading concurrently on this service since you are locking on the `loadedDirectFieldData` I am 100% certain about all the implications but I'm 99% sure this is the wrong way to do that. If you want to prevent a single field from loading twice at the same time we have a nice datastructure for this called `KeyedLock`  that you can use like this"

```Java
private KeyedLock<String> directLoadingLock = new KeyedLock<>();

//...
final String key = fieldNames.indexName();
directLoadingLock.acquire(key);
try {
// load your stuff

} finally {
  directLoadingLock.release(key)
} 

```

that way you can just remove all your synchronizaion