function asyncForEach(list, iterator, done) {
  var i = 0;
  function loop(error, index) {
    if (index && index > i) {
      i = index;
    }
    if (error || i >= list.length) {
      done(error);
    } else {
      try {
        iterator(list[i++], loop);
      } catch (e) {
        done(e);
      }
    }
  }
  loop();
}
Iterates through list with iterator function that must call the
continueFunction to continue iterating.

@param {Array} list list to iterate over
@param {function()} iterator Callback function(value, continueFunction)
@param {function()} done Callback function(error, result) called when
  iteration finishes or an error occurs.