code: function (query, skip, limit, callback) {
      if (typeof query === 'function') {
        callback = query;
        skip = 0;
        limit = -1;
        query = {};
      } else if (typeof skip === 'function') {
        callback = skip;
        skip = 0;
        limit = -1;
        if (typeof query === 'number') {
          skip = query;
          query = {};
        }
      } else if (typeof limit === 'function') {
        callback = limit;
        limit = -1;
        if (typeof query === 'number') {
          limit = skip;
          skip = query;
          query = {};
        }
      }
  
      if (typeof query === 'string') {
        query = { aggregateId: query };
      }
  
      var self = this;
  
      function nextFn(callback) {
        if (limit < 0) {
          var resEvts = [];
          resEvts.next = nextFn;
          return process.nextTick(function () { callback(null, resEvts) });
        }
        skip += limit;
        _getEvents(query, skip, limit, callback);
      }
  
      function _getEvents(query, skip, limit, callback) {
        self.store.getEvents(query, skip, limit, function (err, evts) {
          if (err) return callback(err);
          evts.next = nextFn;
          callback(null, evts);
        });
      }
  
      _getEvents(query, skip, limit, callback);
    }
docs: loads the events
  @param {Object || String} query    the query object [optional]
  @param {Number}           skip     how many events should be skipped? [optional]
  @param {Number}           limit    how many events do you want in the result? [optional]
  @param {Function}         callback the function that will be called when this action has finished
  `function(err, events){}`