Add core Undo components
UndoList can now create UndoItems
Renamed UndoItem to UndoTask
Add full undo support, add FunctionUndo.
Rename BaseFunction to Function