Implement CRUD

This is for #27 

While waiting DataStorage transaction to be finished, this PR is just to show how I will implement actions.

Some design choices
-  Should UNDO be implemented in DataStorage? This will simplify the undo query as just a transaction consisting of one undo operation. Then just re-apply the currently active filter to refresh the GUI.
- Should I always keep a list of all task (in TaskGraph object form) so that filter operation simply filter the graph instead of piercing through datastorage and doing many unnecessary serial/deserialization?
As you can see, this looks stupid and slow, which makes me think that I should store the complete Task list in form of a graph.