onDownloadProgress never fired a completion event when the response
body was empty (e.g. a 200 with Content-Length: 0), since the final
callback in the transform stream's flush() was gated behind a chunk
having been read. Report the final progress unconditionally, falling
back to an empty chunk when the stream produced none.
Closes#878