Perform quaternion operations using numpy arrays
copied from cf-staging / rowanrowan performs quaternion operations directly on numpy arrays. The package does not require conversion of arrays into a special quaternion object, ensuring easy integration into existing code, but broadcasting is fully supported natively for all operations to ensure that code is performant.