code: function(batchSize, opts) {
          var ctx = u.context(SMALL);
          logger.debugf('Invoke iterator(msgId=%d,batchSize=%d,opts=%s)', ctx.id, batchSize, u.str(opts));
          var remote = future(ctx, 0x31, p.encodeIterStart(batchSize, opts), p.decodeIterId);
          return remote.then(function(result) {
            return iterator(result.iterId, result.conn);
          });
        }
docs: Iterator options defines a set of optional parameters that
  control how iteration occurs and the data that's iterated over.
  
  @typedef {Object} IteratorOptions
  @property {Boolean} metadata - Indicates whether entries iterated
  over also expose metadata information. This option is false by
  default which means no metadata information is exposed on iteration.
  @since 0.3
   
  Iterate over the entries stored in server(s).
  
  @param batchSize {Number}
  The number of entries transferred from the server at a time.
  @param opts {?IteratorOptions} Optional iteration settings.
  @return {module:promise.Promise.<Iterator>}
  A promise that will be completed with an iterator that can be used
  to retrieve stored elements.
  @memberof Client#
  @since 0.3