Fix PortAudio underruns (#132) by using async playback

This switches to async playback and fixes the periodic underruns observed in issue #132. Suggestions on style are welcomed.
I think you're doing something wrong here. `num_frames` is the number of frames delivered for this single `_on_music_delivery()` call. The number of frames in each call isn't constant. It may be anything from 0 to 2048 to even more.

```
buffer_slots = 0.5 * (44100 / 2048) = 10.5
```