constructor(map, kind) {
      if (!(isObject(map) && map._mapData)) {
        throw new TypeError('Object is not a map.');
      }

      if ([KIND_KEY, KIND_KEY_VALUE, KIND_VALUE].indexOf(kind) === -1) {
        throw new Error('Invalid iteration kind.');
      }

      this._map = map;
      this._nextIndex = 0;
      this._kind = kind;
    }
23.1.5.1
Create a `MapIterator` for a given `map`. While this class is private it
will create objects that will be passed around publicily.

@param {map} map
@param {string} kind