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?
Extracting the task ID back from Task might be difficult, since I planned to make this Task a serialized text_archive from boost.

Uh, so probably post should also take two parameters, id and Task then...