Abstract connection methods, add support for IRC

This is a big patch that does a number of refactorings in order to allow
supporting different chat protocols. Summary:

- Adds a Connection class, responsible for connecting to a chat service and
  triggering "request" events.
- Request is now subclasseable, and each kind of Connection is responsible
  for providing a matching Request subclass. Examples:
  * The existing XMPP support is moved to XmppConnection + XmppRequest.
  * The new IRC support is in IrcConnection + IrcRequest.
- Lifecycle of request is better handled by attaching a state to them,
  and the Request objects will trigger "again" and "finished" events,
  instead of the overly hairy handling of the Trigger.run() return
  values that was being done in the past.
- Trigger classes are defined per-bot, so a bot that is connected to
  multiple services only has one instance of each Trigger.
- Everything uses fishbone.js instead of Classy now.