More robust decoding for room message content
This MR adds custom Decodable implementations for m.room.message types, to better handle the case where we have some invalid encoding for an optional element.
This doesn't make us perfectly robust against malformed events, but it helps.