Topic/quaternion

This PR adds spire.math.Quaternion[A], a new type.

There isn't any documentation about quaternions yet. Also, this commit doesn't add type class instances. I wanted to figure out what we should do about commutativity, skew fields, etc before starting on those.

The implementations here should be relatively efficient. Like complex, each instance will store 3 type class references, which is too bad. It would be great to move to a more lightweight design, but for now these should be OK.