Create IOperation interface for Query Engine

Related to #67
@evansb please check if it is okay

Brief for the rest:
It is the object that will be passed to DataStore after QueryEngine has parsed the query from NLP. It will be used to fulfil the requirement that DataStore must be transactional ( #27 ).
Another object Transaction will be implemented later on to contain a list of operation that made up a transaction, and DataStore will be managing the transaction objects. Anything I missed/misunderstood from our discussion this afternoon?
Hold on... Just to confirm, if we are to follow http://bit.ly/1svYyXb, and from what we ( @evansb  and I) agreed yesterday, then it will be:
````c++
Transaction t;
t.join(IOperation operation1);
t.join(IOperation operation2);
t.commit();  // or t.rollback();
````
Am I right?