add Quaternion struct
add Quaternion::new
add magnitude methods to Quaternion
use imperative 'normalise' instead of adjective

If structs are immutable, with methods returning a new struct, then
there is no ambiguity in using imperative names for methods. This
seems to be the convention in the standard library as well, e.g.
`str::replace`.
add normalise for Quaternion
add Quaternion::conjugate
implement Add for Quaternion
implement Sub for Quaternion
implement Neg for Quaternion
implement Mul for Quaternion (scalar multiplication)
implement quaternion multiplication

This requires a bit of a trick though. I wonder wheter there is a
better way. Maybe I can do left multiplication instead of right?
add rotate method to Vector3

In Luculentus, this was a free function, but as I made `RotateTowards`
and `Reflect` methods as well, I think this should be a method too.
add rotation constructor to Quaternion
document Quaternion::rotation