Implement some transaction and DataStore API

Sorry not TDD, test cases coming soon
#119 #90 
Edit: test not possible as it relies on some components below it. Can just merge first if there is no problem
Uh, does this work? t is a temporary object which will be killed once `}` is met.
Consider
`transactionStack.push(std::make_shared<Transaction>());`