Seems like we need to introduce an dependency on `async` for #42, so converting the other threading stuff to `async` could be interesting.