Clean up solver structure

Some improvements started with `GaussAlgorithm` class and ended in some more changes related to floating point type of matrices.

Extend all matrices `M` with typedef `M::FP_T`.
Generalize all but `CRSMatrix` algorithms from `double` to `M::FP_T`.