See #175. Add forEach for array and iterable promises.  One snag: should the callback be allowed to return a rejected promise to signal a failure, in addition to being allowed to throw?  If so, it's not clear how to write code to handle that situation, since we want to throw the result away if it's NOT a rejected promise--which we can't know unless we wait for it to resolve.  In the case of arrayPromise, it may be that p.forEach() === p.map().all().yield(undefined), but it's less clear for iteratorPromise