IRC: some refactoring of connect methods.
Restructured and extract IrcConnection type for better separation of
stack and connection.

This restructuring extracts all the methods that are related to an
established connection such that there is a better separation of
concerns between IRC stack state and the state for an individual
connection.
This way it is even possible to set null connection even before the
connection, its listeners, and its threads are completely disposed of.

This also fixes the bug with auto-join behaviour that occurs because of
multi-threading and bad (i.e. no) synchronization on the IRCApi
instance.
Remove unused setNick method.
Moved channel listing operations to separate class.
Fix NPE during IRC connection process.
Tweaks + fix missing synchronized block.
Manage presence using presence manager directly.
Introducted Identity Manager instance responsible for identity-related
operations.
Various small tweaks.
Made identity field final.
Moved getNick() to IdentityManager.
Extracted channel manager for chat room-related operations.
Added notes w.r.t. expected synchronized use.
Extracted MessageManager and fine tuned other manager implementations.
Created and used synchronized wrapper for IRCApi instance.
Rearranged managers.
Implemented 'ban' operation + fine tuning and TODO markers.
Support nick changes except on chat room join.
Tweaks and TODOs.
Unknown commands now result in failed message delivery.

To, for one, protect users from accidents and, for two, don't
accidentally send "stupid messages" we do no longer send any messages
starting with '/'. Instead it shows a message delivery failed message
for error UNSUPPORTED_OPERATION. Reasoning is that the intended
operation is either unsupported or unknown. In both cases there is no
support for it, so let the user know.