code: public static <G extends Gene<?, G>, C extends Comparable<? super C>, T>
  	Collector<EvolutionResult<G, C>, ?, T>
  	toBestResult(final Codec<T, G> codec) {
  		return toBestResult(codec.decoder());
  	}
docs: Return a collector which collects the best <em>result</em> (in the native
  problem space).
  
  <pre>{@code
  final Problem<ISeq<Point>, EnumGene<Point>, Double> tsm = ...;
  final ISeq<Point> route = Engine.builder(tsm)
  .optimize(Optimize.MINIMUM).build()
  .stream()
  .limit(100)
  .collect(EvolutionResult.toBestResult(tsm.codec()));
  }</pre>
  
  If the collected {@link EvolutionStream} is empty, the collector returns
  <b>{@code null}</b>.
  
  @since 3.6
  
  @param codec the problem decoder
  @param <T> the <em>native</em> problem result type
  @param <G> the gene type
  @param <C> the fitness result type
  @return a collector which collects the best result of an evolution stream
  @throws NullPointerException if the given {@code codec} is {@code null}