Rework the synthesizer API

The previous synthesizer API had the usage pattern of:

	while (pho->read())
		synth->write(*pho);
	synth->read(audio.get());

This model had various limitations:

  1.  It is difficult for the synthesizer to use the diphone
      reader to use diphones instead of phones.

  2.  The synthesizer has to buffer the data from calls to write
      for use when generating the audio in the read call.

Thus, to resolve these issues, the new API usage is:

	synth->bind(pho);
	synth->synthesize(audio.get());

This allows the sytnthesizer to:

  1.  Use a diphone reader by wrapping the prosody reader passed
      to bind.

  2.  Control when the audio is generated in the calls to
      synthesize.

It also allows the text-to-speech engine to re-use the phoneme
reader between calls to synthesize, even when the synthesizer has
wrapped it in a diphone reader.
docs: describe LPC diphone voice databases

This describes the format of the voice database (*.vdb) files that
contain Residue Excited LPC diphone voice data. It is based on the
structure of the kal voices in the flite Text-to-Speech program.

The voice database file format is designed to support additional
voice formats, but the structure of those voice formats is not
specified at this time except for the shared header data containing
information about the voice.
List Cainteoir TTS voices (*.vdb).
Transform the markdown documentation to html.
Fix building when MBROLA is disabled.
Add an internal method to create a Cainteoir synthesizer object.
Rework the internal synthesizer creation API.

This change makes it easier to support new synthesizers and
allows each synthesizer to query the metadata for what it needs
to initialize itself.
Rename prosody.hpp to synthesizer.hpp.

The name `prosody.hpp` was too specific to the current pho-file
model of prosody. Renaming this to `synthesizer.hpp` allows the
synthesizer API to move to this header from `engine.hpp` so that
it is co-located with the prosodic data model.

It also allows the data model to support things other than prosody
such as audio (for e.g. ePub 3 Media Overlays) and synthesizer
commands.
Move synthesizer to synthesizer.hpp.

This completes the API restructuring started by the previous
commit, with the exception of tts::get_voice_uri which is still
in engine.hpp.
voice-synthesizer: pass the action to print.

This change makes the print function more readable and extensible,
while simplifying the switch statement.