Refactor the InMemoryCollectionBackend

Currently the row and store collections share a lot of functionality and it's a little tricky to construct suitable test data for use in tests. We should simplify the expected in-memory dict and re-use the shared code (possibly by having a key creator function passed into the in memory store constructor).

Part of #4.
I'd like to see us pass the data dictionary directly into the constructor and remove this method and ``internal_data_for_tests``. Tests can then either access ``._data`` directly, or if we don't like that we can either rename ``._data`` to ``.data`` or just have the tests hang on to a reference to ``._data`` so they can look at what happened to it?