code: public static <T> FutureTask<Void> forEachFuture(
              Observable<? extends T> source, 
              Action1<? super T> onNext,
              Action1<? super Throwable> onError,
              Action0 onCompleted) {
          
          LatchedObserver<T> lo = LatchedObserver.create(onNext, onError, onCompleted);
  
          Subscription s = source.subscribe(lo);
          
          FutureTaskCancel<Void> task = new FutureTaskCancel<Void>(s, new RunAwait<T>(lo));
          
          return task;
      }
docs: Subscribes to the given source and calls the callback for each emitted item,
  and surfaces the completion or error through a Future.
  @param <T> the element type of the Observable
  @param source the source Observable
  @param onNext the action to call with each emitted element
  @param onError the action to call when an exception is emitted
  @param onCompleted the action to call when the source completes
  @return the Future representing the entire for-each operation