adds UndoSnapshot and UndoTaskSnapshot classes, and wired them to work with TaskData. This will be used for implementing the undo command later.