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.
Agreed. I was mostly hanging onto the backend object in case is was needed for other things later, but that doesn't apply to the in-memory case. I also want to wrap the key-management functions up better.