Implement nroot(k) for Quaternion.

This commit adds support for arbitrary nroot's using the quaternion's
polar form. It does meant that when we introduce a type param we're
going to need a Trig[A] instance (like Complex[A] does).