Proposed Datastore API

#90 #119 #112 
This is the DataStore API to be exposed to Query Engine.
DataStore is a singleton that pushes Operations to the deque<Operation> that will later be committed by Transaction.
Transaction ensures that there is only one instance of DataStore that is accessing/modifying the xml tree at any point of time.
Operation classes coming in the next PR
Oh begin() should return an r-value of a new transaction instance, is it? To be passed to the Transaction being constructed? So like
`Transaction::Transaction(Transaction&& t) {
    *this = std::move(t);
}`