Add `async_buffers` to fix thread safety issues

This is a solution to #4.

Essentially, it works by maintaining a set of `async_buffers` which are copied over into the standard buffers before an async flush.

@agmathew would appreciate you testing it out and letting me know what you think