patched ircclient implementation added and session handling added to registry

- lib/sub_collab/negotiator/base now includes PatchedServerSupportedFeatures and PatchedIRCClient classes which capture twisted ticket #3275 changes until that ticket is merged and released
- sub_collab.registry now has session storage and handling methods
CollaborateCommand rewrite of mechanism for choosing a peer to open a session

- openSession() triggers chooseNegotiator() which triggers choosePeer(), all using the sub_collab registry
IRCNegotiator rewrite

- IRCNegotiator extends base.PatchedIRCClient
- rewrote connect() and isConnected()
IRCNegotiator and Peer rewrite

- sub_collab/peer/base.py is now sub_collab/peer/basic with BasicPeer class
- Observer and Observable interface and object moved to sub_collab/common.py
- event constants put into sub_collab/event.py
- added to Negotiator interface acceptSessionRequest() and rejectSessionRequest() methods in place of onNegotiateSession()
- added handling of incoming session request events to CollaborateCommand plugin along with event notification in doDccChat() method in IRCNegotiator
- dcc chat api changes applied to PatchedIRCClient (@todo put into a twisted ticket)
- barely started rewriting negotiateSession()