support optional entries in maps.

this change is so big because now writes occur "from above", e.g. the
components write to the map. this requires passing the map and key
around, which is why so much changed.

i'm not yet sure whether i like this, but i don't see how i could do it
otherwise. maybe we could have walked "upwards" with the cursors?
support the `Option` type.

it's similar to the optional keys, but can be used to wrap any type.
fix value support.
show required fields before optional ones.