Internal DataStore fixes

#171
Sorry for the big PR. After modifying the tests I found that there are so many mistakes in the current design and I need to fix them.
Summary:
- Tests for internals only (for API in #219 )
- Tests are isolated and cleaned up prior to test if necessary (thanks to @evansb for finding this bug and helped me to fix it)
- Change in design: now all operations have to go through Transaction, for consistency of DataStore behaviour (without going through Transaction, commit is not invoked and file will not be saved to disk)
- Rollback is now useful for cleaning up (done in #199, cherry-picked here)
- Not sure if the current tests are *unit* enough, I feel that some components are very tightly coupled, it is impossible to separate them into different units for testing
Of course, you might need to restructure your tests. It looks like the tests here are at different levels.