Updates to TaskRepresenter

The code introduced in #886 had a bug when re-using the same Evaluator with many tasks of the same ID. In those cases, the Driver would sometimes mistake a heartbeat message from a subsequent task attempt for one pof an earlier (crashed) attempt, resulting in errors like this:

 ```
 Received a task status message from a task that is believed to be RUNNING on the Evaluator, but the Driver thinks it is in state FAILED
 ```

 This fixes this issue by explicitly checking for a state transition out of the RUNNING state and removing the `TaskRepresenter` in that case.
cosmetic fixes + minor refactoring in TaskRepresenter