Refactor shard recovery from anonymous class to ShardRecoveryHandler

Previously the bulk of our shard recovery code was in a 300-line
anonymous class in `RecoverySource`. This made it difficult to find and
more difficult to read.

This factors out that code into a `ShardRecoveryHandler` class, adding
javadocs for each function and phase of the recovery, as well as
comments explaining some of the more esoteric functions performed during
recovery.

It's hoped that this will help more people understand Elasticsearch's
recovery procedure.

No *major* functionality has changed, only typo corrections, some minor
allocation improvements and logging clarification changes.
Eclipse: change import settings to have the same order as IntelliJ IDEA.
Mark ShardRecoveryShandler class as final
Discovery: don't wait joinThread when stopping

When a node stops, we cancel any ongoing join process. With #8327, we improved this logic and wait for it to complete before shutting down the node. However, the joining thread is part of a thread pool and will not stop until the thread pool is shutdown.

Another issue raised by the unneeded wait is that when we shutdown, we may ping ourselves - which results in an ugly warn level log. We now log all remote exception during pings at a debug level.

Closes #8359
[STATE] Observe cluster state on health request

Today we use busy waiting and sampling when we execute HealthReqeusts
on the master. This is tricky sicne we might sample a not yet fully applied
cluster state and make a decsions base on the partial cluster state. This can
lead to ugly problems since requests might be routed to nodes where shards are
already marked as relocated but on the actual cluster state they are still started.
Yet, this window is very small usually it can lead to ugly test failures.

This commit moves the health request over to a listener pattern that gets the actual
applied cluster state.

Closes #8350
Allow -SNAPSHOT versions to be parsed by Version.fromString
Internal: temporarily ban buggy IOUtils methods with forbidden

Closes #8375
[STORE] Drop pre 0.90 compression BWC

Pre 0.90 indices need to be upgraded to run with 2.0
we can drop the stored field compression BWC.
Take percentage watermarks into account for reroute listener

Fixes an issue where only absolute bytes were taken into account when
kicking off an automatic reroute due to disk usage. Also randomized the
tests to use either an absolute value or a percentage so this is tested.

Also adds logging for each node over the high and low watermark every
time a new cluster info usage is gathered (defaults to every 30
seconds).

Related to #8368
Fixes #8367
[TEST] fix term_vector realtime test to call wait for green and use no replicas

If a shard (e.g. replica) gets initialized after we indexed the document it gets refreshed internally and we find the doc and its term_vectors, thus the test fails
Tests: log how long IndexWriter.rollback took, and when MocmFSDirectory service started check index
Core: add debug logging to InternalEngine.close
Update multi-get.asciidoc

Documented that the fields parameter can be passed in the query string.

Closes #4006
Docs: Improve the exists/missing filters documentation

Closes #7274
Update datehistogram-aggregation.asciidoc

Clarified use of fractional time units in the date histo agg.

Closes #7957
typo fixes - https://github.com/vlajos/misspell_fixer

Closes #8323
fix mention of Apache License, version 2.

Closes #8400