Server and client organization changes.

Server makes a new ClientObject for each connection. ClientObject "owns" the socket,
and creates it's own threads for socket IO.

Added reader thread to Client code, so it can receive and report messages from the server, while
the other thread is waiting for console input.

Added server "echo" flag, which echos sent messages back to the sending clients.

Added a stub "handle exchange", where the first message sent by the client and the first
message received by the server is taken to be the client's handle. This will
have to change later.

Added sendToAllClients() function. Server sends message from one client to all clients via
their ClientObject representations, prepended with the sending client's handle.

Changed JFrame to JDialog (same thing, but JDialog can wait for input without looping)

This commit breaks the nice disconnection handling we had. Sorry! Now weird things happen
when someone disconnects. I'm trying to restore the old behavior, but I thought I should get
this out now.