code: function EventBus(
     configuration,
     nextTick,
     timeoutFunction,
     errorHandler
  ) {
     this.nextTick_ = f => nextTick( f );
     this.timeoutFunction_ = ( f, ms ) => timeoutFunction( f, ms );
     this.timeoutMs_ = configuration.ensure( 'eventBusTimeoutMs' );
     this.errorHandler_ = errorHandler;
  
     this.cycleCounter_ = 0;
     this.eventQueue_ = [];
     this.subscriberTree_ = {};
  
     this.waitingPromiseResolves_ = [];
     this.currentCycle_ = -1;
     this.inspectors_ = [];
  }
docs: //////////////////////////////////////////////////////////////////////////////////////////////////////////// 
  @param {Object} configuration
  configuration for the event bus instance.
  The key `eventBusTimeoutMs` is used to determine the will/did timeout.
  @param {Function} nextTick
  a next tick function like `process.nextTick`, `setImmediate` or AngularJS' `$timeout`
  @param {Function} timeoutFunction
  a timeout function like `window.setTimeout` or AngularJS' `$timeout`
  @param {Function} [errorHandler]
  a custom handler for thrown exceptions.
  
  @constructor
  @private