Failed shards could be re-assigned to the same nodes if multiple replicas failed at once

After a shard fails on a node we assign a new replica on another node. This is important in order to avoid failing again due to node specific problems. In the rare case where two different replicas of the same shard failed in a short time span, we may fail to do so and assign one of them back to the node it's currently on. This happens if both shard failed events are processed within the same batch on the master.

Closes #5725
[TEST] Wait for LANGUID events to be processed before pulling stats
[TEST] Log where locks are created from if they are still open on close()
Revert "[TEST] Log where locks are created from if they are still open on close()"

This reverts commit 7eb8b0d0c0b2ef3adcfd7b1e10ea0ca9a50c1adc.
[TEST] Fix testRandomDirectoryIOExceptions to wait for green on reopen & add more assertions
Fix P/C assertions for rewrite reader

Inner queries must be rewritten as soon as a weight is pulled ie. must
be non-null.

Closes #5731
[Test] recoverWhileRelocating: Increase timeout while waiting for shards to replicate.
[TEST] RecoveryWhileunderLoadTests sometimes need higher timeouts

In some cases when we have a lot of docs with lots of shards
recovery takes longer than 1m causing the tests to fail before all
shards are recovered. This commit raises the timeout in this test to
5m max while it's rarely needed.

This commit also adds an assertion to ElasticsearchAssertions that
ensures that the cluster health requests are not hitting a timeout.
[TEST] MLT Rest test needs a mapping since we randomized number of nodes/shards
Remove plugin isolation feature for a future version

relates #5261
Fix format string for DiskThresholdDecider reroute explanation
[Docs] Allocation setting explanation

Closes #5748
Benchmark API

Add an API endpoint at /_bench for submitting, listing, and aborting
search benchmarks. This API can be used for timing search requests,
subject to various user-defined settings.

Benchmark results provide summary and detailed statistics on such
values as min, max, and mean time. Values are reported per-node so that
it is easy to spot outliers. Slow requests are also reported.

Long running benchmarks can be viewed with a GET request, or aborted
with a POST request.

Benchmark results are optionally stored in an index for subsequent
analysis.

Closes #5407
Add better error reporting to RestApiParser if assertions are tripped
Fix _bench endpoint specs to have the body on the right level in the json object
[TEST] Allow higher ClusterHealthTimeout on tests if configuration is slow
[TESTS] Add more assertSearchResponse to aggregations tests.
Use startNodesAsync in more tests
Added test with AwaitsFix annotation that simulates a split brain.
[Docs]  Add experimental highlighter plugin