Unreachable agents will be gc-ed by the master registry after `-
registry_max_agent_age` duration or `-registry_max_agent_count`. When the GC happens, the agent will be removed from the master's unreachable agent list, but its corresponding tasks are still in UNREACHABLE state in the framework struct (though removed from `slaves.unreachableTasks`). We should instead remove those tasks from everywhere or transition those tasks to a terminal state, either TASK_LOST or TASK_GONE (further discussion is needed to define the semantic).
This improvement relates to how do we want to couple the update of task with the GC of agent. Right now they are somewhat decoupled.