When saving to disk, `LocalStorageClient` will also save a file named
`file_list.yml` which will list the list of files, which is needed for
downstream save handlers to efficently save.
Add the `revng::cantFail` function which allows to wrap functions with
`std::error_code` and check their result. This is analogous to
`llvm::cantFail` for `llvm::Error`.
In the `type` function, if a file is present in the index then it should
also be checked in the bucked via a HEAD call. This allows revng to
successfully start up even if a file in the `index.yml` files has been
deleted on S3.
The detection of directories in S3StorageClient was flawed as it did not
account for files with a suffix. This commit forces the use of a `/` at
the end to guarantee that the matched path is a sub-{file,directory}.
Move the local path normalization process to a stand-alone function. Fix
a bug that caused relative paths to not be properly resolved due to
missing `true` in `remove_dots`.