Design and implement a synchronous API
IMO we should offer a sync API. Async Rust is considerably more awkward in multiple different directions (and despite all the work that's going on this is likely to remain the case).
We'll need this for #101
Probably this isn't for 0.1.0 unless one of our downstream users really needs it.