Fix the bug uncovered in FailDriverTest.testFailDriverCompletedEvaluator() test

* Make sure there are no pending messages before shutting down the driver
* Add an additional error handler in the EvaluatorManager;
* lots of refactoring and defensive code in DriverManager, EvaluatorManager, and around.