First cut at implementation of the incremental task api
- Incremental task has TaskAction method that takes TaskExecutionContext as parameter (need a better name for this)
- TaskExecutionContext indicates rebuild/incremental, and runs action for all input file changes
    - 'rebuild' context indicates that something has changed that prevents incremental build: changed property, changed output file, etc
    - 'incremental' context indicates that only input files have changed, and runs action only for changes
- This implementation is very much a work-in-progress
Refactor and cleanup change detection so it works better with incremental tasks
- Change the UpdateRule and TaskStateChange api so they no longer deal in String messages, but in change objects
    - Change the 'rule' implementations  so they are just static factories for TaskUpToDateState.
    - Don't use a composite UpToDateRule, but instead keep the various UpToDateState instances separate,
      to allow them to be independently reused.
- Do the regular 'skip' check for incremental tasks, and reuse the state to determine if the task context should
  be a 'rebuild'
- Removed the TaskExecutionState and HistoricExecution abstractions from DefaultTaskArtifactStateRepository: they
  were just getting in the way.
Checkstyle & doc fixes
unit test fixes