Restructuring of the sockets

The basesock changed from an is-a relationship with its derived classes
to a has-a, and the base class for the end-user sockets is now
listen_socket.  Since we had a base socket with at least a little
functionality, we needed a user type hierarchy as well, so we've now got
the base_user, and derived dgram_user and stream_user.  The listen_socket
handles all the user list stuff, and we just dynamic cast in the
derived classes.

Also generalized the socket handling to support IPv4 or IPv6.  The
sockets themselves handle this, but the dgram_user, particularly the
Sockaddr object, needs to have this done as well.