sstable_stream_sink_impl::output() used open_file() followed by
make_file_output_stream() to create the writable stream. For object
storage (S3/GCS) backends, open_file() always returns a readable_file
(read-only), so any write through file::dma_write() throws
std::logic_error("unsupported operation on s3 readable file"). This
broke all tablet migration streaming with S3-backed storage.
Replace the open_file() + make_file_output_stream() path with
make_component_sink() + output_stream<char>(), which correctly
produces an upload sink for object storage and a file_data_sink for
local filesystem. This is consistent with how save_metadata() already
writes to object storage in the same class. The maybe_wrap_sink()
call inside make_component_sink preserves file_io_extensions support
(e.g., encryption).