code: function keyBy(iterable, iteratee=identity) {
    let result = Map()
    for (let value of iterable) {
      result = result.set(iteratee(value), value)
    }
    return result
  }
docs: Creates a Map composed of keys generated from the results of running
  each element of `iterable` through `iteratee`. The corresponding value of
  each key is the last element responsible for generating the key. The
  iteratee is invoked with one argument: (value).
  
  @static
  @memberOf _
  @category iterable
  @param {Iterable} iterable The iterable to iterate over.
  @param {Function} [iteratee=_.identity]
  The iteratee to transform keys.
  @returns {Map} Returns the composed aggregate map.
  @example
  
  let keys = [
  { 'dir': 'left', 'code': 97 },
  { 'dir': 'right', 'code': 100 }
  ]
  
  _.keyBy(keys, (o) => String.fromCharCode(o.code))
  // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }
  
  _.keyBy(keys, 'dir')
  // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }