function reset() {
    var changed,
        pair,
        me = this,
        source = extend({}, me.constructor.prototype, me.options),
        pairs = [[source, me]];

    if (me.running && !calledBy.abort) {
      // no worries, `reset()` is called within `abort()`
      me.abort();
      me.aborted = source.aborted;
    }
    else {
      // a non-recursive solution to check if properties have changed
      // http://www.jslab.dk/articles/non.recursive.preorder.traversal.part4
      while ((pair = pairs.pop())) {
        forOwn(pair[0], function(value, key) {
          var other = pair[1][key];
          if (value && isClassOf(value, 'Object')) {
            pairs.push([value, other]);
          }
          else if (value !== other && !(value == null || isClassOf(value, 'Function'))) {
            pair[1][key] = value;
            changed = true;
          }
        });
      }
      if (changed) {
        me.emit('reset');
      }
    }
    return me;
  }
Reset properties and abort if running.
@memberOf Benchmark
@returns {Object} The benchmark instance.