Benchmarks: Re-factored benchmark infra

Major re-factoring to use a dual-channel strategy for executing
benchmarks. Uses cluster metadata for managing lifecycle events, but
transport channel to send benchmark definitions and results between
master and executor nodes.

This commit also adds:

- Wildcard requests for pause/resume/abort.
- Fixes transport request ACTION string to conform to security naming
conventions.
- Fixed bug that incorrectly calculated total requested iterations in
cases where summary computation was called more than once.
- Rename field 'total_completed_queries' for better readability.
- Clear values for slowest when re-calculating summary results.
- Simplified use of barriers and semaphores in testing logic to allow
suspending benchmark execution for testing various states.
- Handle cases where executor nodes drop from the cluster during
execution.
I have some questions about the concurrency here. This class is only an executor as far as I undestand it now. It's used by the `BenchmarkExecutorService` so the concurrency should be under full control of the ` `BenchmarkExecutorService` no? For instance  it seems like the lock is only used to protect `BenchmarkState` but I think it would be way more intuitive if you just manager the state outside of this class so you don't need he locking at all? Just pass it in with the methods that need it. You already have the `InternalExecutorState` which can also be merged with this state?