Added XMPP support, and presence tracking

Added 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 following clients:

* [Profanity](http://profanity.im/)
* [Psi](psi-im.org)
* [Adium](https://adium.im/)

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.

* I added a "username" property to User, and deprecated the "displayName" property. There's also a virtual property, called "screenName" that returns the username, and failing that the legacy display name. For a user to login via XMPP, they must have their username set.

* I added a "slug" property to Room - it is mandatory, and must be added to existing rooms.

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).

PS:

Let's Chat XMPP usernames are currently in this format: ```<username>@<server hostname>```
An example: ```simon@localhost```
There already is a field named "username" - its purpose is for authentication.

The purpose of the virtual field is to be the user's screen name, and not for authentication. I think naming it "username" would lead to confusion in its purpose/meaning.

I think "screenName" best describes the purpose of the virtual, but you're right, it may lead to confusion between it and displayName.