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?
Mind giving me a brief about that serialized text_archive thing? Actually I am wondering about this too... I should be able to just access the task id from the unordered_map right?