////////////////////////////////////////////////////////////////////////// Public methods ///////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// 
CucumberRunner.start() -> Object
function () {
    var self = this;

    return new Promise(function (resolve, reject) {
      var configuration      = new CucumberConfiguration(),
          runtime            = Cucumber.Runtime(configuration),
          formatters         = configuration.getFormatters(),
          eventMediator      = new EventEmitter(),
          interceptFormatter = new InterceptFormatter(eventMediator);

      formatters.forEach(function (formatter) {
        runtime.attachListener(formatter);
      });

      runtime.attachListener(interceptFormatter);

      runtime.start(function () {
        resolve();
      });

      eventMediator.on('scenario end', function () {
        self.testsFinished++;
        self.totalTests++;
        self.checkMemory();
      });

      eventMediator.on('fail', function () {
        self.hasFailingTest = true;
      });

      eventMediator.on('end', function () {
        self.checkFinishedTests();
        self.checkTestCount();
        self.checkMemory();

        process.send({
          type : 'suiteDone',
          data : process.env.WORKER_TEST
        });

        cluster.worker.kill(0);
      });
    });
  }