In order to solve the new shutdown behavior, just like PriorityScheduledExecutor we have a two phase shutdown process.  "shutdownStarted" then "shutdownFinished".  This is necessary as for example if .tick() returns early from an exception on a normal "shutdown" call, we need to continue to call .tick() until the shutdown has finished.