SYWEB-170: Make firefox stop the mic/camera when the call ends.
SYWEB-118: Add checkbox in settings to enable audio for desktop notifications.
SYWEB-141: Provide a way to resend unsent messages.

This is done by viewing the JSON for the event (double-clicking the text)
and selecting 'Resend'. Also namespaced echo_msg_state better to
__echo_msg_state, like with __room_member.
SYWEB-182: Fix webclient reconnections by actually retrying failed /initialSyncs...
Fix duplicate and missing messages when quickly leaving/joining a room.

Duplicates were caused when you left > rejoined due to not wiping
room.events. Missing scrollback was caused by not wiping duplicate
suppression when the room was left. Also show error dialogs when
failing to leave a room.
Fix null bug (nulling the table is pointless). Ignore historical messages when determining reapings.
Remove old pagination logic and keep just the bits for actual scrolling pagination.
__ Namespace event.changedKey. Move room member mutation to modelService where it should be.
SYWEB-187: Cache the room member name when mutating them.
Remove spammy logs.
SYWEB-137: Refresh TURN servers when logging out and switching HS.
Add send message unit test.
Add more room controller unit tests.
make the model update user metadata from m.room.member state events as much as m.presence events. fixes SYWEB-185 and SYWEB-189
actually, merge the state data into member.user.event in storeStateEvent
make room creation marginally less cryptic
catch NPE
Make the small avatars next to messages clickable
SYWEB-197: Fix login page when loading up on a brand new account with no local storage. More gracefully handle lack of config when performing HTTP requests.
Don't modify RoomMember.user for incoming m.room.member events. Keep RoomMember.user just for presence. This does not break SYWEB-185 fix since that was caused by not copying event content keys correctly.