code: @SafeVarargs
      public static <I,S,O> Processor<I,O> compose(final Processor<I,S> first, final Processor<S,O> last, final Processor<O,O>...extraSteps) {
          return new Processor<I, O>() {
  
              @Override
              public O process(I input) {
                  O result = last.process(first.process(input));
                  for (Processor<O, O> processor : extraSteps) {
                      result = processor.process(result);
                  }
                  return result;
              }
          };
      }
docs: Compose two or more processors into one.
  @param first transform into intermediate type
  @param last transform intermediate type into output type
  @param extraSteps optional, varargs with extra transformation steps on the output type
  @param <I> Input of first processor
  @param <S> Output of first and input of second processor
  @param <O> Output of second processor
  @return a processor that composes the argumentst