Many changes

Linear1DBeamStiffnessMatrixBuilder now calculates axial values.  This
means that this class cannot be used for beams in 2D slabs.

Caches have been implemented for:
- storing connected nodes in elementRepository.
- storing stiffness values for each nodal degree of freedom

A Singular Value Decomposition solver has been implemented.

Compatibility of keys being multiplied by KeyedRowColumnMatrix and
KeyedVector is now checked.

KeyedRowColumnMatrix and KeyedVector now implement internal dictionaries
for keeping track of the rows of the matrix the keys relate to.  This
replaces the IndexOf method as it is purpotedly faster.

Validity of element stiffness matrices is now checked.

IComparison has been implemented on:
- FiniteElementNode
- NodalDegreeOfFreedom

IEquatable has been implemented on:
- FiniteElementModel
- Repository

Renaming of a large number of various files.