AwsSnapshotStream is a helper struct that wraps a Boxed AwsSnapshot and
a BlockCache.
TODO: In the future, a time limit should be added to the block cache so
that tokens can be refreshed.
AwsSnapshotStreamHandle implementes Read/Seek for AwsSnapshotStream. It can
optionally use a DiskCache to store blocks on disk so the same block never
has to be fetched twice. The struct must store its own Runtime handle as
read/seeks are not async.
A disk cache is “perferably” a sparse file that allows snapshot blocks to be
writen to disk and is checked before trying to downloading a block. The cache
uses a i32 (data type that AWS uses to store a block index) index to determine
if a give block has already been downloaded. This index is commited to disk every
n number of writes (see .with_commit_frequency()).