code: @Override
      public $.Option<T> reduce($.Func2<T, T, T> accumulator) {
          Iterator<T> itr = iterator();
          if (!itr.hasNext()) {
              return $.none();
          }
          T ret = itr.next();
          while (itr.hasNext()) {
              ret = accumulator.apply(ret, itr.next());
          }
          return $.some(ret);
      }
docs: Iterate through the traversal to apply the accumulator to
  the result of previous application and the element being iterated.
  If the traversal is empty then return {@link org.osgl.Lang.Option#NONE},
  otherwise an {@link org.osgl.Lang.Option} wrapping the accumulated result
  is returned
  
  @param accumulator the function the combine two values
  @return {@code _.NONE} if the traversal is empty or an option describing
  the final accumulated value