Fixes #336 Assertion Failed : _asyncTaskCount >= 0

The issue is that the result of the onCompletion block of the
CBLMultipartUploader could be null when there was an error occurred.
Hence passing the result object of the block to the removeRemoteRequest
method is not correct and will result to an error that the finished
uploader will not be removed from the remote request array.

When the app is suspended in the background, the replication (pusher)
will stop all of the requests that are in the remote request array.
Calling stop on the finished uploader will cause the onCompletion block
to be called again and will lead to the ‘Assertion Failed :
_asyncTaskCount >= 0’ error when asyncTasksFinished: method is invoked
inside the onCompletion block.

The fix is to use the original uploader object to pass to
removeRemoteRequest method instead of using the result object from the
onCompletion block.
Fixes Puller bugs that can cause asyncTaskCount out of sync

* Similar to the fix for #336 to the Pusher, ensure that we pass the
right request object to the removeRemoteRequest method inside the
OnCompletion block of the CBLMultipartDownloader and CBLBulkDownloader.

* Correct result type of the CBLBulkDownloader’s onCompletion block.

* Call removeRemoteRequest to remove the CBLBulkDownloader object
inside the onCompletion block.
Merge pull request #407 from couchbase/feature/issue_336

Fix #336 Assertion Failed : _asyncTaskCount >= 0