Rewritten to use quaternion math.  Should re-scale every few samples, but seems stable so far.