Lilypond-book: Factor out the formatting from lilypond-book into separate classes
-) One base class BookOutputFormat for all output formats that contains most
of the output logic
-) Each output format has its own BookOutputFormat-derived class with class-
specific settings.
-) Each snippet type still has its own class, but calls appropriate hook
functions of the format class to generate the actual output
This makes it much easier to add new formats in the future or use a
customized output format for special purposes (e.g. the MusicXML test
suite).
Also, got rid of the vars () idiom (which breaks when splitting up code
into separate functions/classes) and use a proper hash instead.