Rip refactoring

The old process used cdrdao to rip both audio and the full TOC in a single pass.  This has a bunch of problems:

* cdrdao isn't as good as cdparanoia to handle damaged discs, resulting in more skips and crackles than necessary
* when ripping both the error-correcting code in cdrdao introduces a lot of errors in the subchannel reading that the TOC depends, so track pregaps and indices get pretty random
* it just gets confused by discs with hidden tracks before the first proper track

This refactoring solves this, by splitting the ripping process into two phases: first get the audio with cdparanoia, then an undisturbed TOC with cdrdao.

All discs in a database will be reripped with the new process, but the change is backward compatible to retain any disc information and edits previously added.  The result should thus be that discs are reripped to a higher quality, without having to restart with a blank database.

## Incompatible changes:

* Ripping state is now not part of `state.State`, but in a separate `state.RipState` object instead.  The ZeroMQ state updater emits `rip_state` messages with these objects.
* `Track.number` may now be 0, indicating a "hidden" track before the nominal first track.
* cdparanoia must be installed on the system
* New settings in `codplayer.conf`: `cdparanoia_command` and `FilePublisherFactory(rip_state_path = ...)`