code: function runBrowsersKeyed(location, remote, platforms, options) {
    var throttle = options.throttle || throat(options.parallel || 3);
    var results = {passedBrowsers: [], failedBrowsers: []};
    return Promise.all(Object.keys(platforms).map(function (key) {
      var run = options.bail ? runBail : runParallel;
      return run(location, remote, platforms[key], {
        name: options.name,
        throttle: throttle,
        capabilities: options.capabilities,
        debug: options.debug,
        httpDebug: options.httpDebug,
        jobInfo: options.jobInfo,
        allowExceptions: options.allowExceptions,
        testComplete: options.testComplete,
        testPassed: options.testPassed,
        timeout: options.timeout,
        onStart: options.onStart,
        onQueue: options.onQueue,
        onResult: options.onResult
      }).then(function (result) {
        if (options.onBrowserResults) options.onBrowserResults(key, result);
        results[key] = result;
        results.passedBrowsers = results.passedBrowsers
                                        .concat(result.passedBrowsers);
        results.failedBrowsers = results.failedBrowsers
                                        .concat(result.failedBrowsers);
  
      });
    })).then(function () { return results; });
  }
docs: Run a test in a collection of browsers and return an array of the results
  
  @option {Number}          parallel
  @option {Function}        throttle
  @option {Object}          capabilities
  @option {Boolean}         debug
  @option {Object|Function} jobInfo
  @option {Boolean}         allowExceptions
  @option {String|Function} testComplete
  @option {String|Function} testPassed
  @option {String}          timeout
  @option {Function.<Result>} onResult
  @option {Function.<String,Array.<Result>>} onBrowserResults
  
  Returns:
  
  ```js
  [{ "passed": true, "duration": "3000", ...Platform }, ...]
  ```
  
  @param {Location}         location
  @param {Object}           remote
  @param {Array.<Platform>} platforms
  @param {Options}          options
  @returns {Promise}