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.
I don't quite understand motivation for moving part of the benchmark state into the cluster metadata while leaving another part of the state on the master node. I think we should either move enough pieces into cluster state to allow benchmark process to sustain master restart or not touch cluster state at all and implement everything with an assumption that if master node dies during the benchmarking process we need to start the process, which might be perfectly fine approach taking into consideration low impact of this feature.