just one comment: quaternions are more accurate than matrix
multiplications, and it is a common practice to use quaternions to
apply multiple rotations - so i would prefer if the internal
implementation of Rotation3D would stay as it is
I'm not sure this is correct as rotation using a quaternion is more or
less computing the rotation matrix and then applying it (hence it is
slower than using a rotation matrix). Composing quaternions is much
more stable than matrices (and the errors make much more sense).