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 had a really hard time to understand all these `*StateChangeListeners` and I think they should all be folded into the `InternalCoordinatorState` It looks a lot like C where you pass a struct into functions to work around the lack of OO concepts. I think it complicates this class a lot, can you please move it out?

I also don't understand the synchronisation on the ChangeListeners since they should not be accessed concurrently? If you wanna protect  the state it should be syncing on the state instead?