Math: doc++
Math: renamed {rotationAngle, rotationAxis}() -> {rotation, angle, axis}().

DualQuaternion and DualComplex has now only rotation() which returns
full rotation part, rotationAngle() and rotationAxis() on Quaternion and
Complex were renamed to angle() and axis().
Math: merged constExpressions() test cases into other test cases.

Simplifies the code and reduces duplicates.
Math: test Constants constexpr.
Math: test pow() constexpr.
Math: allow creating DualComplex/DualQuaternion from real part only.

Useful when creating transformation from rotation only.
Math: better isNormalized() implementation.

Comparing squared length to 1 is not sufficient to compare within range
[1 - epsilon, 1 + epsilon], as e.g. Quaternion with dot() = 1 + 1e-7
when converted to matrix has column vectors with dot() = 1 + 1e-6, which
is just above 1 + epsilon. Thus it's needed to compare sqrt(dot()) in
range [1 - epsilon, 1 + epsilon] or dot() in range [1 - 2*epsilon +
epsilon^2, 1 + 2*epsilon + epsilon^2]. Because epsilon^2 is way off
machine precision, it's omitted, thus dot() in all isNormalized()
implementations is now compared this way:

    abs(dot() - 1) < 2*epsilon;
SceneGraph: add DualQuaternionTransformation::rotate[XYZ]() overloads.

They only pass the arguments to original implementation but return
proper type to avoid weird issues with different method chaining order.