Cleaning up of the Driver idle detection

Closes #934

This PR restructures the Driver's idle handling. It adds `DriverIdleManager` that joins all the different sources for potential idleness. While the set of sources is extensible, it right now contains three:

  * The clock
  * The resource manager
  * The application, represented by its event handlers.

Each of these trigger a check for idleness when they are idle. Also, they are all considered when another component triggers this check. All of this is logged.

*Open Issues:* the unit test for #906 introduced in #985 still doesn't pass. This is because we don't separate the resource manager from the REEF threads. This forces the `FailedEvaluator` in that test to come in *after* idle is detected. I created #986 to track this issue.