Refactor registry operations

Before this change operations to the registry (via router.register, and
router.unregister) were considered destructive. A message on router.register
would overwrite previous messages for that instance, and any message on
router.unregister would unregister every URL for that instance.

This semantic doesn't work with application updates processed by the DEA. The
messages received on router.register and router.unregister should only pertain
to the URLs that are mentioned in the messages. If a URL is not mentioned in
a message, it is left untouched.