code: function push(value, key) {
          value = fn(value, key);
          if (Q.isPromise(value)) return value.then(function(v) {
              newArray.push(v);
          });
          newArray.push(value);
      }
docs: Allow iterator return to be a promise