code: public <R> StreamEx<R> withFirst(BiFunction<? super T, ? super T, ? extends R> mapper) {
          WithFirstSpliterator<T, R> spliterator = new WithFirstSpliterator<>(spliterator(), mapper);
          return new StreamEx<>(spliterator, context);
      }
docs: Returns a stream consisting of the results of applying the given function
  to the the first element and every other element of this stream.
  
  <p>
  This is a <a href="package-summary.html#StreamOps">quasi-intermediate
  operation</a>.
  
  <p>
  The size of the resulting stream is one element less than the input
  stream. If the input stream is empty or contains just one element, then
  the output stream will be empty.
  
  @param <R> The element type of the new stream
  @param mapper a non-interfering, stateless function to apply to the first
  stream element and every other element
  @return the new stream
  @see #withFirst()
  @see #headTail(BiFunction)
  @since 0.5.3