Network interface can be either automatic or a specific interface
can be selected.
Use libnm for network handling rather than rolling our own.
Additional port will be used for exchanging keys via an insecure
grpc connection. This opens the possibility of eventually being
able to add static addresses (not zeroconf-discovered).
Primary connection was improved by:
a) Waiting for confirmation of a duplex connection from the
remote, rather than continuously pinging the remote until
it succeeds. The check loop will be on the server side
instead.
b) Keepalive ping will be handled by grpc internally, which
will signal if the connection drops.
Institution of an 'api version' to be part of zeroconf service
info, to signal which registration and connection method can be
used between machines.
The old connection/authentication methods remain in place for
backward compatibility, so older and newer clients will still
be able to connect. Refactoring was done to organize this a bit.