GPU/Math3D: Replace * and % operators with the less ambiguous function names Dot and Cross.
GPU/Math3D: Add more structs to the union to allow indexing Vec3 objects like colors or texture coordinates.
GPU/Math3D: Replaced Vec3::v array with a method called "AsArray".
GPU/Math3D: Replace ambiguous Vec3 constructors with static methods returning a new Vec3 object.

Possibly fixes a bug or two because the old code was using the constructors incorrectly.
GPU/Math3D: Introduce a new Vec3Ref class which allows to use vector operations on references.
GPU/Math3D: Change Vec3Ref to allow for arbitrary base types for each component.
GPU/Math3D: Add a Vec4 class.
GPU/Math3D: Add a Vec2 class.
GPU/Math3D: Added component swizzlers for Vec2Ref, Vec3Ref and Vec4Ref.
GPU/Math3D: Rename VecXRef::Mul to the star operator.
GPU/Math3D: Support converting Vec3Ref and Vec4Ref objects to u32 color values.
GPU/Math3D: Support accessing Vec2Ref members by the names "s" and "t".
GPU/Math3D: Add method for casting vectors and add const swizzlers.
GPU/Math3D: Add left-side scalar multiplication.
GPU/Math3D: Only implement some VecX methods when they make sense.
GPU/Math3D: Replace VecXRef::Lerp methods with more general and clearer Lerp and LerpInt functions.
GPU/Math3D: Lerp should be inline.
Merge pull request #2823 from neobrain/math3d-extensions

Math3d extensions