tricky; can't just use the dot product, since that blows up when
you cross pi radians. A gear shift approach, use either sin or cos,
same kind of thing as the 3d-parallel constraint.
And report a NaN constraint as unconverged, of course.
[git-p4: depot-paths = "//depot/solvespace/": change = 1890]
constraint structures based on user input, and one for generating
equations from the constraints.
[git-p4: depot-paths = "//depot/solvespace/": change = 1885]