Use an atomic variable for async blocks

This allows an `AsyncBlock` to invoke `done()` from another thread (in addition to asynchronously on the current run loop).

_(The build failure here is unrelated. We're fixing it in github/specta#4.)_