Add FutureStream as alternative to FutureList

With the approach used in FutureList, creating a future list instance
requires prior knowledge about whether the list is empty or not.
This means that `filter` can’t return a FutureList unless it blocks or
returns it wrapped in a Future.

FutureStream wraps a Future that determines whether the list is empty or
not, allowing a consistent `filter` signature.