code: function(event, listener, opts) {
          var ctx = u.context(SMALL);
          return _.has(opts, 'listenerId')
              ? addLocalListener(ctx, event, listener, opts)
              : addRemoteListener(ctx, event, listener, opts);
        }
docs: Listener options.
  
  @typedef {Object} ListenOptions
  @property {String} listenerId - Listener identifier can be passed
  in as parameter to register multiple event callback functions for
  the same listener.
  @since 0.3
   
  Add an event listener.
  
  @param {String} event
  Event to add listener to. Possible values are:
  'create', 'modify', 'remove' and 'expiry'.
  @param {Function} listener
  Function to invoke when the listener event is received.
  'create' and 'modify' events callback the function with key,
  entry version and listener id.
  'remove' and 'expiry' events callback the function with key
  and listener id.
  @param opts {?ListenOptions} Options for adding listener.
  @returns {module:promise.Promise<String>}
  A promise that will be completed with the identifier of the listener.
  This identifier can be used to register multiple callbacks with the
  same listener, or to remove the listener.
  @memberof Client#
  @since 0.3