Guard.cs AgainstBadArgument & AgainstInvalidState

Method signatures for AgainstBadArgument & AgainstInvalidState
amended to allow for string.Format and variable parameters
LinearBeamStiffnessMatrixBuilderTest use GenericCrossSection

Linear1DBeamStiffnessMatrixBuilderTest and
Linear1DBeamStiffnessMatrixBuilderTest use GenericCrossSection.  Should
now be slightly easier to identify the correct stiffness results in the
global stiffness matrix.
Refactoring of LinearSolver

LinearSolver uses protected accessor rather than private for all methods
and variables.
LinearSolver.CalculateUnknownDisplacements has been refactored so that
the validity of the matrix is checked before other calculations are
carried out.
Cache amended to use GetOrCreateAndSave method

GetOrCreateAndSave is used to return a cached value (or if a cached
value is not available; create a new cached value, save it and then
return it).  This replaces providing an out parameter to the Contains
method.
ElementStiffnessMatrixBuilder uses cache

Cache implemented for ElementStiffnessMatrixBuilder, rather than its own
internal cache.
Minor comments and refactoring