code: @SafeVarargs
      public static <T, R> Function<T, R> firstMatch(Clause<T, R>... clauses) {
          return new FirstMatchStrategy<>(Arrays.asList(clauses));
      }
docs: Given some {@code Clause}s returns a function that forwards the result of the
  first clause which condition is true.
  
  @throws IllegalStateException if no clause matches the condition