According to the documentation the destination IO only needs to respond
to #write. However, the downloader breaks this by calling #flush.
We fix this by calling #flush only if the destination IO responds to
that method. We also add a test to enforce that the destination IO only
needs to respond to #write.