Expansion to the utilities provided in FutureUtils
This adds more ways to get a ListenableFuture for a collection of futures.
In addition we only need an iterator, and not a whole collection.  This allows us to tollerate collection modifications while we are setting up the resulting future.