cluster: don't assume all workers bind same ports

For shared handles that do not get connection close messages (UDP/dgram
is the only example of this), cluster must not assume that a port
listened on by one worker is listened on by all workers.
cluster: cluster.disconnect() should check status

Workers that are already disconnected but not yet exited should not be
disconnected, trying to do so raises exceptions.
dgram: implicit binds should be exclusive

Server sockets should be shared by default, and client sockets should be
exclusive by default. For net/TCP, this is how it is, for dgram/UDP, its
a little less clear what a client socket is, but a socket that is
auto-bound during a dgram.send() is not usefully shared among cluster
workers, any more than an outgoing TCP connection would be usefully
shared.