createListener(eventName) {
    const listener = (runnable, err) => {
      this.events.push(SerializableEvent.create(eventName, runnable, err));
    };
    return this.listeners.set(eventName, listener).get(eventName);
  }
Returns a new listener which saves event data in memory to
{@link ParallelBuffered#events}. Listeners are indexed by `eventName` and stored
in {@link ParallelBuffered#listeners}. This is a defensive measure, so that we
don't a) leak memory or b) remove _other_ listeners that may not be
associated with this reporter.

Subclasses could override this behavior.

@public
@param {string} eventName - Name of event to create listener for
@returns {EventListener}