Explcitly close the destination of f_copy to check for errors

We should correctly report failure for user streams like s3:// that do
all their work in flush().
Propagate errors in UserFile::flush() to UserFile::close() to f_put_file_contents()
Remove UserFile::m_opended and use File::m_closed instead