code: public static final <X,Y,Z> Function<X,Z> chain(final IFunction<X,Y> fn1, final IFunction<? super Y,Z> fn2) {
          return new Chain<X,Y,Z>(fn1, fn2);
      }
docs: <p>
  Chains two functions together. The returned function executes the specified
  functions in sequence, being <tt>fn2</tt> executed on the results of <tt>fn1</tt>.
  </p>
  
  @param fn1 the first function to be executed
  @param fn2 the second function to be executed
  @return a function that executes first fn1, then fn2 on the results of fn1.