DiskStorage: Implement `bulk_read_blobs()`
Description
Bulk read is for a potentially very large number of small blobs. The total size of all blobs is limited by the gRPC message size. Immediately read each blob to avoid hitting (system-specific) open file limits.
[ERROR] BatchReadBlobs() failed with: 13: [Errno 24] Too many open files: 'cas/objects/..'
This branch also adds explicit close()
calls to close blobs after reading instead of relying on the garbage collector to release resources.