Restructure the data store.

 - Facades: Transaction and Data Store
 - Internal: Transaction is a stack of operations, DataStore is a stack of transactions.
 - When client code commits or rolls back transaction, facade forwards to real transaction, which tells the internal data store to apply the operations
 - Move the logic for each action into the operation so that we fully utilise polymorphism

All tests pass. But I'm quite certain the tests are insufficient...