Add subworkflow task

Apologies for the size of this pull request. The work on this exposed some problems that had to be dealt with. Here are the major points:

* Implement `TSKSubworkflow` with documentation and unit tests.
* Changed task reset behavior to not auto-start. This never should have been the behavior, but it’s particularly troublesome for `TSKSubworkflowTasks`, because a `TSKSubworkflowTask`’s subworkflow will always start executing when sent `‑reset`.
* Changed task retry behavior to no longer have an effect on pending or ready tasks. This is basically for the same reasons as above: forwarding `‑retry` to a subworkflow will always start it.
* Add delegate message to `TSKTask` and `TSKWorkflow` for notifying delegates of cancellation. This was motivated by the fact that if a subworkflow is cancelled after a subworkflow task is started or contains any cancelled tasks when the subworkflow starts, the subworkflow task should cancel. Doing so silently is probably not the right thing to do, and requiring users to use notifications seems wrong too.

@jnjosh Please review.
Review below this line.