This PR has a large blast radius because it takes the final step and bumps up the Controller to be fully async.
We have historically done a piece-by-piece update, so all operations were already async but the controller interface was kept synchronous.
With this update, the controller is now fully async and all tests are updated.
Most places where the new C# compiler warns about function names not ending in `Async` were also adressed, giving a massive refactor change.
Functionally, no changes are done.
This adds a test with a failed upload.
The failed upload is done in parallel, so (at least) one of the uploads succeeeds and one upload fails.
The backup then errors, but a subsequent backup continues without errors and creates a synthetic filelist.
Also refactored the DeterministicErrorBackend to not use magic strings.
And made it actually deterministic.
This fixes that the recreate will move unused blocks into the `DeletedBlock` table after the database has been recreated.
Due to this, the disruption test can now be verified.