[StationaryLinearProblemSolver] Code cleanup and performance improvement

This patch adds an option to keep the allocated matrix across
invocations of the solver to avoid rebuilding the pattern for the common
case where it doesn't change between calls to the solver.
The matrix is automatically created if it does not exist upon entering
the apply() method. By default, the matrix is now kept across calls to
apply(); it can be discarded manually by calling discardMatrix() and the
old behavior can be restored with setKeepMatrix(false).

The patch also cleans up the code (whitespace, formatting, variable
naming conventions).
[StationaryLinearProblemSolver] Switch default behavior to NOT automatically apply hanging node transformations any more

Having the StationaryLinearProblemSolver apply hanging node
transformations by default is dangerous because most users do not know
about this feature, which can lead to very confusing errors especially
for parallel computations.

As most of our users don't use hanging nodes, it seems more natural to
have to explicitly enable this feature.
[StationaryLinearProblemSolver] Add constructors that take a ParameterTree

Having an ever growing list of defaulted constructor arguments for
components like the StationaryLinearProblemSolver doesn't really scale
and can be really inconvenient if you only want to change argument
number 6 and have to provide values for all earlier arguments just to do
so.

Using a ParameterTree avoids that problem and also provides for an easy
way to specify those parameters from the outside at run time. The new
constructors have a detailed Doxygen comment with a table of all the
keys currently recognized by them.
[Bugfix][StationaryLinearProblemSolver] Fix calculation of final defect

Currently, StationaryLinearProblemSolver calculates the final defect by
multiplying the initial defect by the requested reduction passed on to
the linear backend. This can give completely wrong results if the
backend did not converge.

This patch fixes the issue by using the reduction as returned by the
linear backend instead.
[Bugfix][StationaryLinearProblemSolver] Fix calculation of reduction for linear backend

StationaryLinearProblemSolver calculated the desired reduction as passed
to the linear solver backend as the minimum of the reduction requested
by the user and of start_defect / min_defect.

This is wrong in two respects:

- It should use the maximum, as we only require one of the two
  criteria (relative reduction and absolute defect) to be met.

- The conversion from absolute defect to reduction is wrong, it has to
  be min_defect / start_defect. This problem was masked by the first
  one; otherwise the linear solver would almost always have converged in
  a single iteration.

The patch also adds a little explanation of the meaning of the
parameters reduction and min_defect to the doxygen comment of the new constructors.