fixes bug in getAngleShortestPath

The key was to use `dot(getIdentity())`, not `dot(*this)`. The other changes are just minor cleanup to make it match the layout of `angleShortestPath`.

The test file I added prints out the input and output values for the quaternion, so it can be used to verify things if you are curious.

... On a related note, why does `angle` return the half-angle, while `getAngle` return the angle of rotation? (The second one is the behavior I would expect... I can imagine a number of people get bitten by this "bug".)