Fix bug for BENCH thread pool size == 1

On small hardware, the BENCH thread pool can be set to size 1. This is
problematic as it means that while a benchmark is active, there are no
threads available to service administrative tasks such as listing and
aborting. This change fixes that by executing list and abort operations
on the GENERIC thread pool.

Closes #6174
Fix debug logging message for put template action
[TEST] Randomize number of available processors

We configure the threadpools according to the number of processors which is
different on every machine. Yet, we had some test failures related to this
and #6174 that only happened reproducibly on a node with 1 available processor.
This commit does:
  * sometimes randomize the number of available processors
  * if we don't randomize we should set the actual number of available processors
    in the settings on the test node
  * always print out the num of processors when a test fails to make sure we can
    reproduce the thread pool settings with the reproduce info line

Closes #6176
Added some debug logs to the recovery process
Added meta data and routing version to cluster state's pretty print
When sending shard start/failed message due to a cluster state change, use the master indicated in the new state rather than current

This commit also adds extra protection in other cases against a master node being de-elected and thus being null.

Closes #6189
Add execution control for active benchmarks

This commit adds the ability to pause and resume active benchmarks. It
adds new API calls for sending control requests.

TODO:
1. Pausing internally is implemented using a busy wait. Should this be
changed to use proper blocking concurrency primitives?
2. The returned status code can be incorrectly reported in some cases.
This is due to BenchmarkResponse.mergeState() assuming a natural
ordering of enum values.
3. Needs refactoring of test cases to use pause/resume feature.

Closes #6173
Modify pause/resume implementation

Modified the pause/resume implementation to use semaphores rather than
busy waits.

TODO:
1. Pause/resume needs better testing.
2. Ability to submit a benchmark into an initially paused state to make
testing other actions easier.

Closes #6173
Merge branch 'issue-6173' of github.com:aleph-zero/elasticsearch into issue-6173

Conflicts:
	src/main/java/org/elasticsearch/action/bench/BenchmarkExecutor.java
	src/main/java/org/elasticsearch/action/bench/BenchmarkService.java
	src/test/java/org/elasticsearch/action/bench/BenchmarkIntegrationTest.java