A "server group" is a numbered collection of items that centers around the
idea that some number of user-specified server entries can form one logical
unit.  A server group at its very core contains some number of server entries
and all of the chanels, windows, and data associated with those servers.  Each
server group is either active or inactive depending on whether they contain
a server that is connected and active, or if all servers are disconnected.
Each server group may have at most one server active at a time, and thus all
channels, windows, and other data associated with the group correlate to that
open server.  If the user wants to switch to another server in the server
group, then all channels, windows, and so forth go to the new server when it
is connected to, because those things belong to the group, and not to the
connected server.

This is a different paradigm from standard ircII, where servers are stored 
in an array and refered to by array indexes.  This paradigm instead refers
to a server and the group it is contained in.  For backwards compatability,
servers still do retain a unique identifier, but this is not the actual key
for the server.

Thus, we are permitted to organize connections to an even higher degree.
A "protocol" is some number of server groups, all of which speak the same
"language" and use the same handler functions.  A "domain" is a term that
can be used for related protocols in some fashion.

So:

			Domain		-- TCPIP	(internet streams)
			Protocol	-- RFC1459	(irc-class)
	|-----------------|---------------|
    (Undernet)         (EFnet)         (IrcNet)
     (group 1)        (group 2)        (group 3)
 |----|----|----|  |---|---|---|     |----|----|
(s1) (s2) (s3)(s4)(s5)(s6)(s7)(s8)  (s9)(s10)(s11)

The server list above then contains 11 servers, arranged into three groups,
one for each network.  There is nothing that says we have to have one group
per network or that each network can only have one group.  We could have
eleven groups if we wanted to.  But the reason for grouping servers is so 
that when the client needs to reconnect to a server, if it fails in its
attempt, it moves to the next server in the group.  If a connection can be
established to this next server, all of the channels, windows, and other
data associated with the other server move to the new server, because that
stuff belongs to the group, not to the individual servers.  The channels and
windows dont particularly care what server they are connected to, only what
group they belong to.

