First pass at generifying Quaternion.

This is currently not doing any specialization, and there are still
places where we're using == instead of ===. But Quaternion is generic
and the tests are passing!
Add specialization to Quaternion[A].

This commit should complete the effort to generify Quaternion. The type
is now specialized on Float, and Double, and should correctly use ===
in all applicable cases.

The only serious issue remaining is the lack of signum.

One difference between Complex[A] and Quaternion[A] right now is that
Complex uses the faster, but less precise polar operations for both pow
and fpow. Right now, Quaternion has a precise, recursive pow
implementation which is a bit slower, but won't introduce any error.
I'm not sure whether Complex should adopt Quaternion's strategy or
vice-versa.