* Use websocket events to sync usernames/avatars instead of periodic syncing.
* Use caches for fetched room_ids, room state (for usernames and avatars). Also switch to using a single cache with locks.
* Don't store full message objects in cache, just store the relation of matrix event IDs to discord message IDs and vice-versa. Content can be fetched from the server instead.
* Don't rely on websocket events for mentioning Discord users, mentions are now done by mentioning the dummy matrix user. The ID to be mentioned is extracted from the MXID instead.
* General clean-ups.