Refactor `Gitlab::Geo::Replication::BaseTransfer`

The following discussion from !15606 (merged) should be addressed:

  • @mkozono started a discussion:

    An idea/nitpick: Lack of filename implies remote store. We are depending on this meaning in this test and its corresponding condition in can_transfer?.

    We could explicitly initialize BaseTransfer with e.g. remote_store:. This would also allow the Downloaders to call e.g. transfer.execute, and transfer would know whether to download or stream to object storage.

    This could be done in a follow up, if desired.