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 also don't understand the concurrency here - similar to `BenchmarkState` there are so many different locks in this code It's very unclear what is happening. Also everything is protected by locks but vars are still volatile? As a sidenote can you remove the indentation for `benchmarkId` we don't do this in our code