code: function (trigger, callback) {
      var self = this;
      var id = self.nextId++;
  
      var collection = self._collectionForMessage(trigger);
      var record = {trigger: EJSON.clone(trigger), callback: callback};
      if (! _.has(self.listenersByCollection, collection)) {
        self.listenersByCollection[collection] = {};
      }
      self.listenersByCollection[collection][id] = record;
  
      if (self.factName && Package.facts) {
        Package.facts.Facts.incrementServerFact(
          self.factPackage, self.factName, 1);
      }
  
      return {
        stop: function () {
          if (self.factName && Package.facts) {
            Package.facts.Facts.incrementServerFact(
              self.factPackage, self.factName, -1);
          }
          delete self.listenersByCollection[collection][id];
          if (_.isEmpty(self.listenersByCollection[collection])) {
            delete self.listenersByCollection[collection];
          }
        }
      };
    }
docs: Listen for notification that match 'trigger'. A notification matches if it has the key-value pairs in trigger as a subset. When a notification matches, call 'callback', passing the actual notification.  Returns a listen handle, which is an object with a method stop(). Call stop() to stop listening.  XXX It should be legal to call fire() from inside a listen() callback?