On the Mac app, we want to display the shortest FQDN - we might as well
do the sorting as they leave the tunnel.
Right now it's coming from a map, so it's they arrive in a random order
each peer update.
Closes#14734.
- Each outgoing agent upsertion also includes the timestamp of the last wireguard handshake.
- Agent upsertions will be created, for existing agents, with an updated last handshake time on a regular, fixed, interval of 10 seconds.
Addresses #14734.
This PR wires up `tunnel.go` to a `tailnet.Conn` via the new `/tailnet` endpoint, with all the necessary controllers such that a VPN connection can be started, stopped and inspected via the CoderVPN protocol.