Initial tidy

Moved ClientConnection into its own file. Made no sense for it to be
tagged onto the end of the main program class.

Improved the quality of the commenting
Gateway system created, and user developed

Moved out of the main program all code related to the networking and
user management. This code was not relevant to the creation and running
of the core program so makes sense to extract it and clean it up.

A Gateway system has been developed to allow for multiple communication
types while reusing as much code as possible.

The UserGateway replaces the old code in the progam class and is
responsible for handling new clients connecting. Functionally identical
but much cleaner. The authentication system is not yet plumbed in.
Network code now in connection class

All networking code is now in the connection class allowing the Gateways
to focus on handling the messages rather than the underlying protocol.

ClientConnection now derives from a base type that contains the network
code to prevent duplication.

GenericGateway has a prepare work method to allow for one of actions on
the worker thread before the main WorkStep is begun.
Reorganization and tidy

Moved the Authentication module into the UserGateway as it does not need
to be a program wide instance.

Reorganized various classes into different sub folders and files.

Gone through all the main files improving code legibility and quality