D.Trail: export isLine predicate
D.CubicSpline: add example with diagrams-haddock
D.Path: export new partitionPath function
D.TwoD.Path: stroke' now splits paths into lines & loops.

Only one primitive is created if there are only lines or only loops,
but in the case of both lines and loops in the same path, two
primitive diagrams are created, one with just lines and one with just
loops.  This is to help backends which need to handle them
differently---in particular, lines should not be filled, even if a
fill attribute is set. Splitting up paths in this way is semantically
legitimate, since lines cannot affect the semantics of any other
pieces of the path (this is not true of loops, where multiple loops in
the same path can interact with each other to determine the fill).

See also diagrams/diagrams-cairo#32.