DataStore Internal tests

#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 coming soon)
- Tests are isolated and cleaned up before and/or after 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)
- Rollback is now useful for cleaning up (done in #199 )
Does anyone have any clue as to why this test causes problem? It also caused problem when I test it locally, but it works fine after I run through it step by step via debug mode without changing anything, and now I can't reproduce it locally =/