Add an all-encompassing union of address structures we are interested in.

Right now, it's a union of sockaddr_in and sockaddr_in6.  This avoids a lost
of nasty casts in the code and makes our lives easier in the long run.
Parse any addresses given on the command line.

We can parse IPv4 and IPv6 using standard POSIX calls.  We store the results
in a sockaddr__u, already parsed and ready to pass to the various BSD
networking system calls.  There is any easy check for IPv4 vs. IPv6, so those
options will go away.  There are also some easy calls to check for multicast
addresses, so *that* option will go away as well.

Let the code figure this stuff out.
Remove the IPv4, IPv6 and multicast options.

We can parse an arbitrary address, so the -S option can figure out what to
bind from the sa_family field.  From there, it can check for a multicast
address, so *that* option can be zapped as well.
Convert the -S options to have a mandatory options.

The -S option is the server option.  You have to specify an address to listen
on.  If you want to listen on any interface, you can use:

	0.0.0.0:port
	[::]:port

Given the address, we can figure out the family and create the appropriate
socket.

I have to move some routines around to avoid making prototypes.  I don't know
if this is a Good Thing, but it saves some typing.
Robustness---we do need to check if any hosts have been specified.