Moved spindle data within tp struct

As suggested by Michael, the static variables holding spindle position
info were rolled into a single struct, within the TP_STRUCT itself.
There are a few more stray globals here and there, but now tp.c is
acting a bit more like a class. Most functions prefixed with "tp" pass
the TP_STRUCT as the first argument, which is class-like.

TODO:
* Move syncdio into TP_STRUCT
* add const specifiers to remaining TP functions
* pick a style concerning arguments in terms of input / output order
* Docstrings moved to headers?
Reverted to copy by value in some places

tpAddLine, tpAddCircle, and tpAddRigidTap were reverted to pass the
input data by value. This is mostly to keep the pointer passing within
tp.c, so that we don't have to go digging through multiple files to
figure out where the memory is originally allocated.
Added additional debug output for arc creation

To help diagnose issues with small segments, new debug data was added to
tpCreateBlendArc. This is useful to track down exactly which segments
were being shrunk too much. Short segments are causing issues with
overshoot, since a very short segment can be skipped entirely if the
velocity is too high.
Potential fix for "sawtooth" effect

Added a candidate check for blend arcs to make sure that we don't
shrink the previous segment too much. If we can't entirely eliminate
the previous segment, then it's better to shrink the blend arc so that
the line segment is long enough for TP to land on at least once.
Better fall-back to parabolic blends
Added extra check in blend velocity calculation

Works with simple rapid test, because we're not falling back to
parabolic blends. Something is still wrong with the refactored parabolic
blends, though. Next step is to force a failure every time. We should be
able to fall back, but currently that may not be working.
Added acceleration scale factor for blending

One problem with having multiple types of blending is each method has
its own limits on acceleration, in addition to a trajectory segment's
maxaccel. For example, parabolic blends scale acceleration down by 0.5
so that two segments can overlap without exceeding the max accel in any
direction. These limits are not necessarily there for other cases, so
this commit stores the scale factor separately.
Switch to debug print
Major refactor of blending code to isolate steps
Fixed parabolic blending bug introduced previously

Parabolic blending was crashing out due to an improper estimate of being
on the final deceleration. The final decel calculation assumed that we
were on the final deceleration if the ideal new velocity was close to
what we could actually reach based on machine limits. This should only
be true when we are decelerating to a stop.
TODO: what exactly changed that made this assumption not work anymore?
Misc refactoring and cleanup to isolate blend stuff

One issue that has plagued these changes is that parabolic blend code
was spread out over tpRunCycle. Now a lot of the parabolic blend stuff
is packed into a few functions, shrinking tpRunCycle.
Closer to working, but we don't catch slow feed rate errors
Smooth performance improvement
Works on arc example but stops on LCNC axis example
Not making much difference
Fixed GUI issue, but now acceleration spikes are back
Tracked down acceleration glitch to resetting of current velocity
Fixed a few arc blend bugs

Removed optimization bug that was causing large overshoots and
some acceleration spikes.

Remaining issues:
* infinity norm is used to calculate limiting acceleration for a given TC.
  The trajectory planner needs to know machine limits if it is to
  compensate.
* Occasional segfault appears on load after a clean shutdown. No issues
  while running so far.
Added elementwise PmCartesian multiplication

It may be useful to have element-wise multiplication for PmCartesians.
The name isn't the best choice, but it follows the convention.
Fixed acceleration errors due to inf-norm

Added a simple check to bound blend arc acceleration to the lowest
linear axis acceleration. This is a temporary fix, since we need to
enable STRUCTS_IN_SHMEM for this to work.