Dashboard: Store machine list permanently.

* The list is managed by cockpitd.
* There is a dedicated websocket to access it.
* The dashboard monitors this connection.
* If the connection is down, machine additions are stored locally in
  the browser, and written out when the connection comes back.
Tests: Support multiple browsers and use two in check-multi-machines
Web: Allow management of all machines with a hack.

And not just a single random one.  This is achieved by giving a hint
which client to use as the singleton legacy client and then reloading
the application.  This isn't pretty, but works.
Dashboard: Use tags to determine what is shown.

Only a machine with tag "dashboard" is shown, and the "Add Server"
dialog shows the rest.
Tests: Use firewall-cmd in cockpit.setup.