Change GetFieldMapping API to broadcast requests to nodes hosting the relevant indices.

This is due to the fact that have to have mappers in order to return the response.

Closes #5177
[TEST] Added get field mapping test variant that tests with a cluster that has a master only node.
Added TransportGetFieldMappingsIndexAction that uses TransportSingleCustomOperationAction as base class, with the goal to reuse common logic (like: retry on failures, shard picking, connecting to nodes)
Need use ensureYellow() b/c get mapping request checks the mapping on the master node
Need use ensureYellow() b/c get mapping request checks on actual shard instead of master node
Made SearchContextHighlight.Field class immutable to prevent from erroneously updating it, as it doesn't necessarily map to a single field

A Field instance can map to multiple actual fields when using wildcard expressions. Each actual field should use the proper highlighter depending on the available data structure (e.g. term_vectors), while we currently select the highlighter for the first field and we keep using the same for all the fields that match the wildcard expression.

Modified also how the PercolateContext sets the forceSource option, in a global manner now rather than per field.

Closes #5175
Recycler: better lifecycle control for pooled instances (#5214)

- introduce additional destroy() callback that allows better control
over internals of recycled data
- introduced AbstractRecyclerC as superclass for Recycler factories
(Adrien) with empty destroy() by default
- added tests for destroy()
- cleaned up Recycler tests (reduce copy&paste)
Implement BlendedTermQuery#extractTerms to support highlighing.

some of the highlighters require term extraction to be implemented in
order to work. BlendedTermQuery doesn't implement the trivial extraction.

Closes #5246
Add coming 0.90.12 version to the constants
Remove nanoTime in global cluster randomization in favor of deriving the
seed from the main master seed.

The problem here is that if you don't give cluster's seed then test times
fluctuate oddly, even for a fixed -Dtests.seed=... This shouldn't be the
case -- ideally, the test ran with the same master seed should reproduce
pretty much with the same execution time (and internal logic, obviously).

From the code point of view "global" variables are indeed a problem
because JUnit has no notion of before-suite hooks. And RandomizedRunner
doesn't support context accesses in static class initializers (this is
intentional because there is no way to determine when such initializers
will be executed). A workaround is to move such static global variables to
lazily-initialized methods and invoke them (once) in @BeforeClass hooks.

I've changed the code slightly so that nanoTime is *not* used if
tests.cluster_seed is not provided. Instead, tests.cluster_seed becomes
the current master seed. This will work both from IDEs and from Maven. I
felt tempted to remove the entire tests.cluster_seed layer (because any
static seed should/ could be derived from the master seed) but I don't
know what you guys are doing with it so I leave this decision to a
follow-up commit.
Follow-up cleanup of shared test cluster's separate seed in favor of master seed.