foldl = function foldl(iterator, accumulator, collection) {
  if (typeof iterator !== 'function') {
    throw new TypeError('Expected a function but received a ' + typeof iterator);
  }

  each(function(val, i, collection) {
    accumulator = iterator(accumulator, val, i, collection);
  }, collection);

  return accumulator;
}
Reduces all the values in a collection down into a single value. Does so by iterating through the
collection from left to right, repeatedly calling an `iterator` function and passing to it four
arguments: `(accumulator, value, index, collection)`.

Returns the final return value of the `iterator` function.

@name foldl
@api public
@param {Function} iterator The function to invoke per iteration.
@param {*} accumulator The initial accumulator value, passed to the first invocation of `iterator`.
@param {Array|Object} collection The collection to iterate over.
@return {*} The return value of the final call to `iterator`.
@example
foldl(function(total, n) {
  return total + n;
}, 0, [1, 2, 3]);
//=> 6

var phonebook = { bob: '555-111-2345', tim: '655-222-6789', sheila: '655-333-1298' };

foldl(function(results, phoneNumber) {
 if (phoneNumber[0] === '6') {
   return results.concat(phoneNumber);
 }
 return results;
}, [], phonebook);
// => ['655-222-6789', '655-333-1298']