Now that we don't expect there to be duplication betwen the 'timeline' and
'state' results, there's no point in having the state map. (That does mean the
events themselves need event_id fields though).
Also:
- move the contents of the 'unsigned' dictionary into the events themselves
- replace the state list with two layers of dictionary keyed on type and
state_key
- rename the children of the 'rooms' dict from "joined/invited/archived" to
"join/invite/leave" to match the membership states
"joined/invited/archived".
Rename the room_map to rooms and remove the grouping indirection. When we
want groups then we can add them under a separate key, either at the
top-level or as part of the events themselves.
invite. This is kept separate from the actual state for the room as
it may be derived from an incomplete, unverified copy of the state
that was bundled with an invite event received over federation.
Divide the rooms into separate groups in preparation for adding tag
support.
Further subdivide the rooms into "joined/invited/archived" based the
membership of the user in the room because that membership affects what
events the user can view from the room. E.g only users that are joined
to a room may see the ephemeral events for the room.