Major refactoring of internals involved in UpToDate checking and incremental tasks
- Changed TaskUpToDateState to fire changes against a specific UpToDateChangeListener, which provides ability to stop accepting further changes.
- Replaced CompositeUpToDateState with SummaryUpToDateState
  - does not implement TaskUpToDateState
  - Only provides changes from a single underlying source, and limits the number returned
- Most TaskUpToDateState implementations extend SimpleUpToDateState
   - Pulls all changes into a collection before firing change events
   - Caches all changes for subsequent calls
   - Output files currently use this mechanism: this will be changed soon
- InputFilesUpToDateState now caches changes from earlier invocations, and resumes parsing from the last change
   - FileCollectionSnapshot.changesSince takes a SnaphostChangeListener, that permits cancellation and resuming again from a particular change.
Reorganise internal package structure or o.g.a.internal.changedetection
Further package reorganisation for change detection
- Split 'rule' implementations from TaskArtifactStateRepository, and removed coupling
Stream output file changes in up-to-date checks
- OutputFilesSnapshotter now honours the listener stop signal
- Always assert that listener does not receive events after stopping
Extend unit test coverage
- coverage for SimpleTaskStateChanges
- Test for isStopped() handling of DefaultFileSnapshotter
- Ensure predictable iteration order in DefaultFileSnapshotter and unit test beginAfter()
Unit tests for file state change 'rules'