Added important Quaternion test cases

Added tests for all class methods and the compound operators.
Fixed variables being overwritten during multiplication

The way the operator*=() function was written was incorrect. A temporary
Quaternion is necessary to prevent the result of one part of the operation
from influencing another.