Define functions `DotProduct`, and `CrossProduct`

Define the functions `DotProduct`, `CrossProduct`, and the `operator*`
function between two vectors.

The cross product is defined for only a small subset of dimensions
making the dot product far more useful across all different dimensions.

In the context of Butter, vectors are defined as column matrices; that
is to say they have the type: `SMatrix<TYPE, /* dimension count */, 1>`.
Construct a way to normalise a vector

Write the functions `Norm` (used to map a vector to a linear value
representing its length or magnitude), and `Normalise` to modify a
vector such that its length is one.

Both of these functions are well defined mathematically. `Norm` is
required for the current result of `Normalise`.