almost done implementing quaternions