MUC management implementation

This is a PR to keep track of the work on #283, *it shouldn't be merged just yet*.

At this stage, it defines the API to query joined rooms (and list their occupants and topic), join/leave rooms and get/set the topic for a room.

I'd love some feedback on the architecture so far before I flesh it out further.
already in room