offset is done from the first agent that has the same role as
         current one and has the minimum group rank.
  Return type:
     *List*[*Worker*]

_exit_barrier()
  Wait for "exit_barrier_timeout" seconds for all agents to finish
  executing their local workers (either successfully or not). This
  acts as a safety guard against user scripts that terminate at
  different times. This barrier keeps the agent process alive
  until all workers finish.

_initialize_workers(worker_group)
  Starts a fresh set of workers for the worker_group. Essentially
  a rendezvous followed by a start_workers.

  The caller should first call "_stop_workers()" to stop running
  workers prior to calling this method.

  Optimistically sets the state of the worker group that just
  started as "HEALTHY" and delegates the actual monitoring of
  state to "_monitor_workers()" method

abstract _monitor_workers(worker_group)