quaternion, improve quat::rotate(vec3, vec3) to gracefully handle corner cases, and add unit tests for all of these.