Use PKTAsyncTask for managing callbacks and cancellations

PKTAsyncTask is meant to replace the somewhat awkward PKTRequestTaskHandle and PKTTaskDescriptor. PKTAsyncTask tries to abstract any request management into a cancellable future. If resolves to a value or an error and you can register callbacks on it. If can also be cancelled by calling the `cancel` method, which will cancel the underlying async operation.