After Reverting a Space with an App and then Reloading, the Space is broken
Summary: Revert works just fine initially. But after the Space flushes and gets reloaded, it no longer knows about its App.
The problem is that the SetState event (unlike SpaceSnapshot) doesn't include the Apps. The App Ids are there, but the state isn't.
Fixing this by finally accepting that Apps should get serialized in-place, in DHSpaceState. It's a little expensive, but not much moreso than what we already had, and it's much cleaner and more consistent.