Change the interface of DbModel to more closely match KeyValueStore

This means we don't have to support all of the methods in dicts without
when we don't have the same support for those methods in the underlying
storage.

[LMS-826]
Make Runtimes and model_datas singleton objects

These both now take XBlocks are the first argument in most methods, and
uses the ids from the block the method is operating on, rather than
baking scope ids into the runtime and model_data objects.

[LMS-827]