Added basic XMPP support, and presence tracking

Added basic XMPP supports, so that users can:

* connect to the XMPP server
* view a list of available rooms
* join and leave rooms
* send and receive room messages
* observe other users join and leave

I've tested this functionality using the [Profanity](http://profanity.im/) client.

I tried Adium, but I could only connect and view the list of available rooms. For some reason I wasn't able to get Adium to join rooms.

Other stuff:

* I had to implement our own custom presence tracking, as we could no longer rely on express.io/socket.io to keep track of who is connected.

* I needed to refactor some of the logic out of the express.io controllers, and into a separate "core" folder/module. This logic is shared by express.io and the XMPP server.

What's next:

* We need to test a wider range of clients, and implement enough features to get them working.

* It'd also be nice if we add support for more XMPP features (where they make sense).

* We need to introduce "username" for users, and "slug" for rooms. Without these the XMPP user experience suffers greatly. It'd be even better if we can repurpose "Display name" so that it functions as both a display name and username.