scheduler: refactor how registry stores state

Formerly, the same job (i.e. the same set of containers and container
IDs) could be scheduled N times in a single scheduling domain, because
we used the agent endpoint as the key in the desired maps.

Now, we use the container ID as the key, so it can only exist once. Once
it's been placed on an agent, it'll stay there.