[TEST] Remove ambigious 4th suggestion - order differs slightly on Java 8
[TEST] Ensure that iteration order of TestSection is consistent
A new ClusterStateStatus to indicate cluster state life cycles

When the ClusterService applies a new cluster state, it is first assigned as the new active one and then all listeners are called. Some of ES's features sample the current state and try to take action on it (for example index a document). If that fails, they will wait for change in the cluster state and try again (for example, wait for a shard to start and try indexing again).

If you're unlucky you sample the state after it has been assigned as the "active" state but before all listeners has done the work. In this cases the action take (i.e., indexing a doc) will still fail (as the shard is not yet started) but waiting for a new state may take a long time or fail.

This commit adds a new ClusterStateStatus that allows to better track the stages a cluster state goes through (currently `RECEIVED`, `BEING_APPLIED` & `APPLIED`). This allows detecting that a cluster state is not yet fully applied and retry without waiting for a new state to arrive.

This commit also adds a utility class , ClusterStateObserver, to make this pattern slightly simpler and avoid common pit falls.

Closes #5741
Update benchmark.asciidoc

Fixed incorrect parameter spec for benchmark nodes
Use unlimited flush_threshold_ops for translog

Currently we use 5k operations as a flush threshold. Indexing 5k documents
per second is rather common which would cause the index to be committed on
the lucene level each time the flush logic runs which is 5 seconds by default.
We should rather use a size based threshold similar to the lucene index writer
that doesn't cause such agressive commits which can slow down indexing significantly
especially since they cause the underlying devices to fsync their data.
[TEST] Randomize translog setting per index
[DOCS] Add /_search_shards documentation
Improved bloom filter hashing
Make improvements to how bloom filter hashing works based on guava 17 upcoming changes, see more here (https://code.google.com/p/guava-libraries/issues/detail?id=1119)
In order to do it, introduce a hashing enum, and use the (unused until now) hash type serialization to choose the correct hashing used based on serialized version.
Also, move to use our own optimized murmur hash for the new hashing logic.
Parse has_child query/filter after child type has been parsed

Fixes #5783
Fixes #5838
[SPEC] Renamed benchmark endpoints

benchmark.submit -> benchmark
benchmark.list   -> list_benchmarks
benchmark.abort  -> abort_benchmark

And fixed the related tests
[SPEC] Added missing list_benchmarks test
[SPEC] The scroll_id is no longer a required qs param
Can be passed in the body instead
[DOCS] getting started tutorial
[SPEC] Added path without scroll_id to clear_scroll
Change default merge throttling to 50MB / sec

The current setting of 20MB/sec seems to be too conservative given
the capabilities of modern hardware. Even on cloud infrastructure this
seems to be too lowish. A 50MB default should provide better out of the box
performance
Disable benchmark tests until nodes set to run with
-Des.node.bench=true
Re-order log statements to be correct for segment and top level warming.
[TEST] Randomized number of replicas between 0 and the number of data nodes - 1 (rather than just between 0 and 1)

Closes #5896