Clean up solver structure and made class GaussAlgorithm a class template.

- Removed several useless classes (```LinearSolver```, ```DirectLinearSolver``` and ```DenseDirectLinearSolver```) and in the consequence the inheritance structure of solvers.
- Class ```GaussAlgorithm``` is now a template class. The template arguments are matrix type and vector type. For new matrix and/or vector types it is necessary to specialize the template. This is already done for vector type ```double* ```.