Fix memory leak when percolating with nested documents

The percolator uses non segment reader impl (MemoryIndexReader), this causes associated cache entries not automatically be cleared when the reader closes and that is why the percolator removes the cache entries manually (filter cache, field data) 

However when percolating a document with nested objects a multi reader is used that wraps a MemoryIndexReader for each nested object. Cache entries use the leaves as key in filter / field data cache, but the percolator clear using the top level multi reader. This causes cache entries never to be evicted and resulting in OOM.

The memory is fixed by the following changes:
* Not allowing caching for non segment reader implementations.
* The percolator never cache anything that associated with the in-memory index where document being percolated resides in.
what I meant here was instead of casting here to a `SegmentReader` at all you should do this:

```Java

Boolean previous = cache.seenReaders.putIfAbsent(context.reader().getCoreCacheKey(), Boolean.TRUE);
if (previous == null) {
    // we add a core closed listener only, for non core IndexReaders we rely on clear being called (percolator for example)
    SegmentReaderUtils.registerCoreListener(context.getReader(), cache); 

```

we fixed ` SegmentReaderUtils.registerCoreListener(AtomicReader reader, SegmentReader.CoreClosedListener listener) ` in lucene 4 to work with atomic readers too so we get that upgrade for free