code: function (events, fn) {
          // Wrap fn in a self-detaching handler; saved on the original fn so off() can detect it later
          if (!fn._eventOnceWrapper) {
              fn._eventOnceWrapper = function (event) {
                  // Note: this wrapper is reused for all attachments of the same fn, so it shouldn't reference
                  // anything from the outer closure other than 'fn'
                  event.target.off(event.type, fn._eventOnceWrapper);
                  fn.apply(this, arguments);
              };
          }
          return this.on(events, fn._eventOnceWrapper);
      }
docs: Attaches a handler so it's only called once (per event in the 'events' list).
  @param {string} events
  @param {?function(!{type:string, target:!Object}, ...)} fn