code: public static Predicate<Object>
  	byExecutionTime(final Duration duration, final Clock clock) {
  		return new ExecutionTimeLimit(duration, clock);
  	}
docs: Return a predicate, which will truncate the evolution stream if the GA
  execution exceeds a given time duration. This predicate is (normally)
  used as safety net, for guaranteed stream truncation.
  
  <pre>{@code
  final Phenotype<DoubleGene, Double> result = engine.stream()
  // Truncate the evolution stream after 5 "steady" generations.
  .limit(bySteadyFitness(5))
  // The evolution will stop after maximal 500 ms.
  .limit(byExecutionTime(Duration.ofMillis(500), Clock.systemUTC())
  .collect(toBestPhenotype());
  }</pre>
  
  @since 3.1
  
  @param duration the duration after the evolution stream will be truncated
  @param clock the clock used for measure the execution time
  @return a predicate, which will truncate the evolution stream, based on
  the exceeded execution time
  @throws NullPointerException if one of the arguments is {@code null}