Cleanup quaternions
Fix for latest nightly rust compiler
Try generic implementation for Semigroups