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.
we need to find a way to keep the headers and context of the original benchmark requests here, when executing the "internal" ones. That might involve recreating the `SearchRequest` via copy constructor passing in the original benchmark request where the headers and context would get copied from.