implement threading choice of eval polymorphically

There were two options for threading the population evaluation.
Single and multi threaded and this was controlled with an if stmt.

The EvaluationEngine now uses Ploymorphism to manage the threading.

This will make it easy to write additional threading mechanisms
for the EvolutionEngine to use.

There is no injection/extension point to be able to use other
threading algorithms yet.