Constructing segments

The atomic constituents of paths are segments, which are single
straight lines or cubic Bezier curves. Segments are
translationally invariant, that is, they have no particular
"location" and are unaffected by translations. They are,
however, affected by other transformations such as rotations and
scales.

bezier3 v1 v2 v3 constructs a translationally invariant cubic
Bezier curve where the offsets from the first endpoint to the
first and second control point and endpoint are respectively
given by v1, v2, and v3.

Computing with segments

atParam yields a parametrized view of segments as continuous
functions [0,1] -> v, which give the offset from the start of
the segment for each value of the parameter between 0 and 1.
It is designed to be used infix, like seg `atParam` 0.5.

splitAtParam splits a segment s into two new segments (l,r)
at the parameter t where l corresponds to the portion of
s for parameter values from 0 to t and r for s from t to 1.
The following should hold for splitting:

arcLengths m approximates the arc length of the segment curve s with
accuracy of at least plus or minus m. For a Cubic segment this is computed
by subdividing until the arc length of the path through the control points is
within m of distance from start to end.