Added `spanner_starts` and `spanner_stops` to LilyPondFormatBundle.
Spanner format contributions are now collected via a LilyPondFormatBundle.

Use `Spanner._get_lilypond_format_bundle(leaf)` to return a
LilyPondFormatBundle populated with the appropriate format contributions.

As of this commit this new method wraps the older `_format_before_leaf()`,
`_format_right_of_leaf()` and `_format_after_leaf()` methods. Most spanners
will be migrated to use only the `_get_lilypond_format_bundle()` method in
upcoming commits.

Note that this provides considerably more fine-grained control over where
spanner format contributions are placed relative to a leaf or container, as all
of the format slots and format categories are available for manipulation.
Modernized Beam format contributions.
Modernized Hairpin format contributions.
Modernized Slur format contributions.
Modernized PhrasingSlur format contributions.
Modernized TrillSpanner format contributions.
Modernized TextSpanner format contributions.
Modernized ComplexTrillSpanner format contributions.
Added Spanner._get_basic_lilypond_format_bundle() convenience method.

This method prepopulates a LilyPondFormatBundle with grob override and revert
contributions as necessary.
Improved Hairpin format contributions.
Modernized Glissando format contributions.
Modernized ComplexBeam format contributions.
Modernized MultipartBeam format contributions.
LilyPondFormatBundle.update() can now coerce its argument.

If the argument passed to LilyPondFormatBundle.update() is not a
LilyPondFormatBundle but implements a `_lilypond_format_bundle` property, that
property will be called.

This means that a LilyPondFormatBundle can be easily updated with a
LilyPondContextSetting or LilyPondGrobOverride object without resorting to any
manual string manipulation.
Modernized PianoPedalSpanner format contributions.
Reimplemented LilyPondFormatManager.report_spanner_format_contributions().
Improved Slur format contributions.
Cleaned up spanner-related tests system-wide.

NOTE: It's often difficult to debug tests which fail on a call to
TestManager.compare because pytest doesn't print any human-readable information
about the failure, except that some component failed to compare to a given
string:

    assert systemtools.TestManager.compare(
        staff,
        r'''
        some_string,
        '''
        )

This can be made much more useful by adding the LilyPond format of the
component under test as the second argument to the assert:

    assert systemtools.TestManager.compare(
        staff,
        r'''
        some_string,
        '''
        ), format(staff)

Should the above test fail, pytest will show both the comparison string as well
as the LilyPond format of the component. Much nicer!
Modernized MultipartBeam format contributions.