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?
Maybe a Task object should self-identify, so we put the entire object and not pass another ID.