Add crossover implementation and unit tests