[System]: Make WebClient report an error when the download aborted prematurely.

On iOS, Stream.Read() returns 0 if you put the device to sleep while the
download is still running.  We now work around that by checking whether the
file has been fully downloaded.  Note that this only works if the server
included a Content-Length header.

Fixes #3924.