Exception handling improvements

**This closes #760:**
  * Added an interface `ExceptionCodec` which shall be used to (de-)serialize Exceptions. This replaces the use of `ObjectSerializableCode<Exception>`. The interface returns `Optional<Throwable>` upon deserialization, thereby geving a clean hint as to whether the Exception can be deserialized.
  * Added a default implementation of `ExceptionCoded` called `DefaultExceptionCodec` which does use Java Serialization.
  * Used an injected `ExceptionCodec` in all places where Exceptions were (de-)serialized using `ObjectSerializableCode<Exception>`

**Refactorings:**
  * Cleaned up the message passways in `EvaluatorManager` into more special cased methods like `.onEvaluatorFailed()`
  * Improved failure logging in the `FailTaskTest` `Driver`.