Group logs by project and task Introduces a BuildOperationType enum and adds it to the default BuildOperationDescriptor. Passes this information to the logging infrastructure through the BuildOperationExecutor.
All BuildOperations now have a ProgressLogger. This allows progress logging to maintain a heirarchy of build operations, otherwise we would not be able to group many log events.
ProgressStartEvents are given additional information in a compact form to allow a tree of build operations to be maintained and their operation types associated. This allows us to associate log events who aren't fired by progress logging to still be grouped.
A LogGroupingOutputEventListener uses these build operation types and the build operation heirarchy to buffer and output logs related to tasks and project configurations.