derive(State) for enums
We can support enums as State types by storing a byte to mark the variant at the root key, and using that to instantiate the enum variant (each variant's fields must implement State).
The only questions are how to map variant fields to keys (we want to share data between variant transitions without copying) and how to transition between variants (maybe the author can create transitions with impl From<VariantContentsA> for VariantContentsB, although we will have to somehow delete the data for dropped fields).
This depends on figuring out a good state composability pattern, as is the goal in #26.
This also applies to derive(Query).