code: function asyncForEach(promise, iterator, scope, limit) {
      return asyncArray(asyncLoop(promise, iterator, scope, limit).chain(function (results) {
          return results.arr;
      }));
  }
docs: Loops through the results of an promise. The promise can return an array or just a single item.
  
  ```
  function asyncArr(){
  var ret = new comb.Promise();
  process.nextTick(ret.callback.bind(ret, [1,2,3,4,5]);
  return ret.promise;
  }
  
  comb.async.forEach(asyncArr(), function(){
  //do something with it
  }).then(function(arr){
  console.log(arr); //[1,2,3,4,5];
  });
  
  ```
  
  You may also return a promise from the iterator block.
  
  ```
  var myNewArr = [];
  
  comb.async.forEach(asyncArr(), function(item, index){
  var ret = new comb.Promise();
  process.nextTick(function(){
  myNewArr.push([item, index]);
  ret.callback();
  });
  return ret.promise();
  }).then(function(){
  console.log(myNewArr) //[[1,0], [2,1], [3,2], [4,3], [5,4]]
  });
  ```
  
  
  @param {comb.Promise|Array} promise the promise or array to loop through
  @param {Function} iterator a function to invoke for each item
  @param [scope] optional scope to execute the function in.
  @return {comb.Promise} a promise that is resolved with the original array.
  @static
  @memberof comb.async
  @name forEach