Factor out version into constant.

This allows the version to be used elsewhere if needs be, pulls it out so it's
easier to find when incrementing the version, and also makes it look
sufficiently important.

Also, imo, it's a magic string, so it shouldn't be stuck in the middle of a
command!
Introduce methods in server.

This factors out the processes of reading and processing a command by
introducing two private methods.

This imo makes the high-level logic read better and also suggests possible
method object introduction later (the same things are being passed into the various
methods).
Fix segmentation fault on disconnect.

This appears to have been due to the sockets being kept in a list
of unique_ptr; on VS2013 at least, std::vector.erase has the effect
of destroying the erased items, which means the unique_ptr is
destroyed, taking the socket with it!

This is an issue because Qt hasn't yet finished with the socket when
it calls disconnect, and it doesn't like the idea of the socket going
fwoosh during said disconnect.

My theory is that this is evident when testing on VS2013 because of
how VS's debugging configuration automatically places nonsense
values in destroyed memory- so, when Qt tries to access the members
of the socket, it goes boom quite spectacularly.

My fix uses QSharedPointer, which allows for an on-delete action to
be called when its destructor is called.  I've rigged it up to tell
Qt to delete the client as soon as convenient- I can't tell if this
works or produces a memory leak, but I checked and the argument to
provided as the deleter is indeed called.

An alternative involves using raw pointers instead, and calling
deleteLater on the client in Disconnect.