COUndoTrack: integrate COEndOfUndoTrackPlaceholder better into the track node object graph:

- COEndOfUndoTrackPlaceholder has a UUID now
- [node parentNode] equals [COEndOfUndoTrackPlaceholder sharedInstance] when node is the first persistent node in a track
- [node parentUUID] equals [[COEndOfUndoTrackPlaceholder sharedInstance] UUID] when node is the first persistent node in a track

This makes [undoTrack nodes] match the semantics of -[COCommandGroup parentNode], whereas before they didn't match.

These changes only affect the way the objects are presented in memory, not what is persisted (which hasn't changed at all).

The main motivation for these changes is to make it easier to present COEndOfUndoTrackPlaceholder in the undo history graph. Previously, the node wasn't drawn in the graph, although you could navigate to it by pressing "undo". Now it's rendered in the graph, and you can navigate to it by double-clicking.