docs: public final static <T> Stream<Streamable<T>> window(final Stream<T> stream, final int windowSize, final int increment) {
          final Iterator<T> it = stream.iterator();
          final Mutable<PersistentList<T>> list = Mutable.of(Seq.empty());
          return Streams.stream(new Iterator<Streamable<T>>() {
  
              @Override
              public boolean hasNext() {
                  return it.hasNext();
              }
  
              @Override
              public Streamable<T> next() {
                  for (int i = 0; i < increment && list.get()
                                                       .size() > 0; i++)
                      list.mutate(var -> var.removeAt(0));
                  for (; list.get()
                             .size() < windowSize
                          && it.hasNext();) {
                      if (it.hasNext()) {
                          list.mutate(var -> var.insertAt(Math.max(0, var.size()), it.next()));
                      }
  
                  }
                  return Streamable.fromIterable(list.get());
              }
  
          });
      }