- Remove some useless locking, use messages instead
- Sessions can be created locally (we need to do a new Session) or from
incoming messages (the session is created for us but we still need to
attach a window to it). The code was not handling all cases right
- Better detection of carbons or group chat replay sessions (not sure
what they are but now we check the type to detect them)
Use separate maps for group and normal chat, saving much confusion.
Use gloox sessions and MUC rooms as keys instead of strings.
Remove linear lookups in the map (what's the point of having a map?)
Do not create a MessageSession for MUCs as it prevents getting messages
in the MUC handler
This should fix all cases where we would accidentally create multiple
windows for the same thing.