housekeeping: Add offloading bucket sink
This MR is part of a series addressing repository offloading, as described in #6513.
The subsequent related MR can be found at !7487.
Repository offloading involves interacting with the offloading storage to handle operations such as downloading, uploading, deleting, and listing objects.
In this MR, we introduce a Sink interface, which defines the essential operations required for interacting with offloading storage. Additionally, a simulation bucket is implemented to inject delays and errors into responses, enabling more robust and comprehensive testing.
Edited by Eric Ju