Correctly handle cancellation and returning once headers are ready

This fixes #6 as well as ensuring we fully cancel the network request when asked to. Unfortunately, we are being trolled by mono/mono#792, so this may be tricky.

## TODO

- [x] Handle cancellation on Android
- [x] Return early on Android
- [x] Handle cancellation on iOS
- [x] Make the iOS code not a complete mess
- [x] Return early on iOS