code: <T, U> Stage<U> doStreamCollect(
        final Collection<? extends Stage<? extends T>> stages, final Consumer<? super T> consumer,
        final Supplier<? extends U> supplier
    ) {
      final Completable<U> target = completable();
  
      final StreamCollectHelper<? super T, ? extends U> done =
          new StreamCollectHelper<>(caller, stages.size(), consumer, supplier, target);
  
      for (final Stage<? extends T> q : stages) {
        q.handle(done);
      }
  
      bindSignals(target, stages);
      return target;
    }
docs: Perform collection for stream collector.
  
  @param stages stages to apply to collector
  @param consumer consumer to apply
  @param supplier supplier to provide result
  @param <T> source type
  @param <U> target type