Performs the given steps in parallel.

If any sub-steps in an aggregate result in an error, the aggregate step as a whole is considered to have errored.

Similarly, when aggregating `task` steps, if any fail, the aggregate step will fail. This is useful for build matrixes:

    plan:
    - get: some-repo
    - aggregate:
      - task: unit-windows
        file: some-repo/ci/windows.yml
      - task: unit-linux
        file: some-repo/ci/linux.yml
      - task: unit-darwin
        file: some-repo/ci/darwin.yml

The `aggregate` step is also useful for performing arbitrary steps in parallel, for the sake of speeding up the build. It is often used to fetch all dependent resources together:

    plan:
    - aggregate:
      - get: component-a
      - get: component-b
      - get: integration-suite
    - task: integration
      file: integration-suite/task.yml