code: function indexOf(array, target, method) {
      var index = -1;
      // hashes are added to the end of the event array
      // so it makes sense to start searching at the end
      // of the array and search in reverse
      for (var i = array.length - 3; i >= 0; i -= 3) {
        if (target === array[i] && method === array[i + 1]) {
          index = i;
          break;
        }
      }
      return index;
    }
docs: /*
  The event system uses a series of nested hashes to store listeners on an
  object. When a listener is registered, or when an event arrives, these
  hashes are consulted to determine which target and action pair to invoke.
  
  The hashes are stored in the object's meta hash, and look like this:
  
  Object's meta hash
  {
  listeners: {       // variable name: `listenerSet`
  "foo:changed": [ // variable name: `actions`
  target, method, flags
  ]
  }
  }