OF-2209: Detect and remove 'ghost users' from MUC.
This commit adds a new feature that complements the pre-existing feature that would kick idle users from a MUC room.
The new feature is defined in the section related to 'ghost users' in the MUC specification (XEP-0045). It is two-fold:
- When a room is sent a stanza that contains an error that indicates that an occupant is unreachable, drop that occupant from the room.
- When an occupant has not interacted for a configurable amount of time, send a ping to that occupant. If the occupant is unreachable, this will trigger an error to be sent back, that will be processed by the implementation of the first item in this list.
This new feature is configurable through the admin console (Group Chat > Group Chat Settings > (select service) > Other Settings), but is enabled by default.
OF-2207: Ensure that the room exists on all nodes, before firing off other room events to avoid race conditions
This commit turns the room creation event into a synchronous action. I'm hoping that the impact of this will be minimal, as creating a room should be a relatively uncommon occurrence.