Reimplement Score.Dynamics #82

Adding context-sensitive notation exposes a fundamental problem in
how the export modules work.

Original design
----

  There is a class for each external format T as in

    class HasT a where
      toT :: a -> T

  Each pitch type has an instance for HasT

    instance HasT Pitch where
      toT = notatePitch
        where
          notatePitch :: Pitch -> T

  Each note transformer has an instance for HasT that transforms the underlying note

    instance HasT a => HasT (DynamicT d a) where
      toT (DynamicT (d,x)) = notateDynamics d $ toT x
        where
          notateDynamics :: d -> T -> T

  Export of parts, voice structure etc is handled parametrically, i.e. something like

    generateBarsBeats :: Score a -> [a]
    notateBarsBeats :: [T] -> T

  The full notation is then handled parametrically as in:

    notateBarsBeats . fmap toT . generateBarsBeats

Problems
----
Reimplement Score.Dynamics #82

Basic implemenetation