Supervisor

This is the first step towards agent auto-updates. The supervisor
regularly checks if the agent is still running and, if not, restarts it.

If it finds an update in an update drop directory specified on the
command line, it will apply it before starting the agent.

Currently, applying an update just means unpacking a zip file to a
specified location.
If I understand the documentation for parse_known_args() correctly, this does not do what I want here. The way I understand it is that it will go through all the arguments start to finish, parse those it can and put those it can not into the second return value. What I would need it to do here, however, is stop parsing as soon as it sees an argument that's just "--".

Since there are a few arguments for the supervisor that are identically named to some arguments for the agent, that distinction is quite important, too.