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
fields including a '.' can be included in a filter.
I considered replacing '.' with '/'. Since '/' was less likely to appear
in event field names. However if we used '\' to escape a literal '/' we
risk confusing it with the JSON escape '\/'.