Initial implementation of the sparse matrix.

@bsoetaer 
Tests pass when the contracts are disabled.
This matrix should only be generated when the SparseMatrixBuilder says it should be but just a note:
Sort of a defensive programming note but should do i == j - 1 and then i == j+1 for lower. Otherwise if a non-tridiagonal matrix is fed to this all the calculations will probably go wrong.