all failures thrown once all futures complete (maybe empty)
a future of a collection of all results that completes successfully once all futures complete or that completes with the first failure encountered while scanning futures in left to right order