CancellationContext
This PR adds the `Context` type for cancellation with context propagation. It works by storing a tree of forks of the main context, providing a way to control cancellation.