Improve nodes/metric detection in RestNodesInfo

Because one URI parameter can contain either nodeIds or a list of metrics,
the check to detect if this parameter is either a nodeId or a metric needs
to be more accurate.
Rename edit_distance/min_similarity to fuzziness

A lot of different API's currently use different names for the
same logical parameter. Since lucene moved away from the notion
of a `similarity` and now uses an `fuzziness` we should generalize
this and encapsulate the generation, parsing and creation of these
settings across all queries.

This commit adds a new `Fuzziness` class that handles the renaming
and generalization in a backwards compatible manner.

This commit also added a ParseField class to better support deprecated
Query DSL parameters

The ParseField class allows specifying parameger that have been deprecated.
Those parameters can be more easily tracked and removed in future version.
This also allows to run queries in `strict` mode per index to throw
exceptions if a query is executed with deprected keys.

Closes #4082
[REST tests] Randomized REST path chosen if more than one is available with current parameters

Previously we would always take the same path if more than one was available
Deprecate document _boost

Fixes #4664
Change the default recycler type.

Recycling is not thread-local anymore by default but instead there are several
pools of objects to recycle that threads may use depending on their id.
Each pool is protected by its own lock so up to ${number of pools} threads may
recycler objects concurrently.

Recyclers have also been refactored for better composability, for example there
is a soft recycler that creates a recycler that wraps data around a
SoftReference and a thread-local recycler that can take any factory or recyclers
and instantiates a dedicated instance per thread.

RecyclerBenchmark has been added to try to figure out the overhead of object
recycling depending on the recycler type and the number of threads trying to
recycle objects concurrently.

Close #4647
add host name and host address to DiscoveryNode
this will allow to easily access them regardless of the transport address used, and allow to remove reverse lookup of host names from ip address extracted from inet transport address where needed
- fixed terms aggs ordering by sub metric agg - introduced MetricsAggregator to enable access to metrics values without creating buckets

fixes: #4643
Disabling allow_explicit_index breaks bulk
fixes #4668
Disabling allow_explicit_index breaks bulk
grr, formatted by mistake...
Add Strings.substring() that handles short strings.
Handle node id shorter than the usual randomBase64UUID.

Fixes #4572 (half of it...)
Aggregations: clean-up comparisons.