code: public <U> List<U> scanLeft(U seed, BiFunction<U, ? super T, U> accumulator) {
          List<U> result = new ArrayList<>();
          result.add(seed);
          forEachOrdered(t -> result.add(accumulator.apply(result.get(result.size() - 1), t)));
          return result;
      }
docs: Produces a list containing cumulative results of applying the
  accumulation function going left to right using given seed value.
  
  <p>
  This is a terminal operation.
  
  <p>
  The resulting {@link List} is guaranteed to be mutable.
  
  <p>
  For parallel stream it's not guaranteed that accumulator will always be
  executed in the same thread.
  
  <p>
  This method cannot take all the advantages of parallel streams as it must
  process elements strictly left to right.
  
  @param <U> The type of the result
  @param seed the starting value
  @param accumulator a <a
  href="package-summary.html#NonInterference">non-interfering </a>,
  <a href="package-summary.html#Statelessness">stateless</a>
  function for incorporating an additional element into a result
  @return the {@code List} where the first element is the seed and every
  successor element is the result of applying accumulator function
  to the previous list element and the corresponding stream
  element. The resulting list is one element longer than this
  stream.
  @see #foldLeft(Object, BiFunction)
  @see #scanRight(Object, BiFunction)
  @since 0.2.1