code: function each(iterator, collection) {
    return (isArrayLike(collection) ? arrayEach : baseEach).call(this, iterator, collection);
  }
docs: Iterate over an input collection, invoking an `iterator` function for each element in the
  collection and passing to it three arguments: `(value, index, collection)`. The `iterator`
  function can end iteration early by returning `false`.
  
  @name each
  @api public
  @param {Function(value, key, collection)} iterator The function to invoke per iteration.
  @param {Array|Object|string} collection The collection to iterate over.
  @return {undefined} Because `each` is run only for side effects, always returns `undefined`.
  @example
  var log = console.log.bind(console);
  
  each(log, ['a', 'b', 'c']);
  //-> 'a', 0, ['a', 'b', 'c']
  //-> 'b', 1, ['a', 'b', 'c']
  //-> 'c', 2, ['a', 'b', 'c']
  //=> undefined
  
  each(log, 'tim');
  //-> 't', 2, 'tim'
  //-> 'i', 1, 'tim'
  //-> 'm', 0, 'tim'
  //=> undefined
  
  // Note: Iteration order not guaranteed across environments
  each(log, { name: 'tim', occupation: 'enchanter' });
  //-> 'tim', 'name', { name: 'tim', occupation: 'enchanter' }
  //-> 'enchanter', 'occupation', { name: 'tim', occupation: 'enchanter' }
  //=> undefined