Refactor selection, crossover and mutation config

Instead of putting selection, crossover and mutation config structs in
the config module they are placed in their own modules. Since they are
dependent on their own implementation.