Small refactorings to EvaluatorManager

 * Introduced the new class `EvaluatorMessageDispatcher` that deals with all messages to the user code.
 * Added a new configuration option that sets the number of threads used in `EvaluatorMessageDispatcher`

Note that I changed the default number of threads to 4 from 16. Given that we instantiate one of these per Evaluator, 16 seemed a bit excessive