New Image type and other support for editing messages
This PR adds a new Image type, which it does not use yet (ha) but which could be very useful in the future for pulling together all of our image loading code into one place.
It also includes various improvements in the room message types, the Room, the Message, and the Session, for better handling replacement events (aka edits).