changed the way logout and whoisin messages are handled. I had to comment out the short-circuits for role checking.
Implemented a thread pool. Users each have a Callable object (replaces UserThread) that, when called, gets one message from the socket if one is available. The AsyncListener class runs in its own thread and makes sure that the Callable objects are called as often as possible until the User logs off.
Refactored communication to use only strings. Made some changes to the client to support string-based communication.
Created a package for the many message handler classes.
Merge master into branchToMergeInto