It would be worth isolating your comments on these changes to my xblock pull request that Don is rebased on top of.

`KeyValueStore` is an XBlock interface, and is deliberately smaller than the dictionary interface. That said, it might be worth adding the equivalent of `FieldData.has` to `KeyValueStore`. In `KeyValueStore` it could be aliased as `__contains__`, but for `FieldData.has` it needs both the xblock that's being referred to and the field name being accessed.