code: public static <C extends Collection<Optional<E>>, E> Iterator<C> unchainLongest(int channelSize, Iterable<E> iterable, Supplier<C> channelProvider) {
          dbc.precondition(iterable != null, "cannot unchainLongest a null iterable");
          final ConstantSupplier<Optional<Integer>> channelsSizesProvider = new ConstantSupplier<Optional<Integer>>(Optional.of(channelSize));
          return new UnchainLongestIterator<C, E>(channelsSizesProvider, iterable.iterator(), channelProvider);
      }
docs: Demultiplexes elements from the source array into an iterator of channels.
  All returned channels will have the specified size, eventually the last channel could have the last elements empty.
  <code>
  unchainLongest(2, [1,2,3,4,5]) -> [[just 1, just 2],[just 3, just 4],[just 5, nothing]]
  </code>
  
  @param <C> the channel collection type
  @param <E> the element type
  @param channelSize size of the channel
  @param iterable the source iterable
  @param channelProvider the supplier used to create channels
  @return an iterator of channels