Improve the gc `cleanDir` function to handle nested directories.

We recurse into a directory if its modification time is too old.
Often top-level directories will always be "too recent" as files are
continually added/removed, so use a `force` parameter to force
recursion through a specific number of top-level directories.

We also keep trying to clean up files, even if individual files give
errors, which prevents total gc failure if a single file "goes bad"
somehow.

Change-Id: Ic23155bd9c6afbd2c465ad2b74dd121f0a8b3ed9
Remove blocking (sync) operations in backend.

Change-Id: I84eb117c0a556cf500eac11cb4c82a21fa361352