Ensure and track monotonicity
This is a collection of many interacting patches that help to ensure monotonicity of the TNNMG iteration and add more diagnostic output to track the latter: * Implement `ScalarSumFunctional::operator()` in a way that is consistent with the global energy evaluation. Unfortunately this means we cannot use the evaluation of the individual constrained functionals. * Implement `derivative(ScalarSumFunctional)`. The functional is in general not differentiable, hence we return the minimal norm entry of the subdifferential or, equivalently, the projection of zero into the subdifferential. Finding a root of the subdifferential is equivalent to find a root of this single-valued map. Furthermore a subdifferential-aware bisection is equivalent to a bisection for the single-valued map. * To ensure monotonicity of the coarse grid correction add a postprocessing step to the line search: After an approximate root of the derivative has been found, check if this decreases energy. If not, then half the step size until it does. Since we have a descent direction this must terminate. This step is necessary because the functional is not convex. * When comparing energies take care to always evaluate it exactly the same way, to avoid non-monotonicity due to inconsistent evaluation algorithms. * Track energy decrease of nonlinear smoother and coarse grid correction. While the latter is guaranteed by the above changes, it may happen that the smoother is not monotone - either because of local solves with uncontrolled inexactness (called exact in our terminalogy, arg...) or because of round-off-errors. * Add more diagnostic output to the table: * Number of subdifferential evaluations during line search. Hint on interpretation: This will be at least 2+#bisectionSteps. * Number of functional evaluations during line search. Hint on interpretation: This will be 2+#reductionSteps, where #reductionSteps is the number of halving steps done to ensure monotonicity (see above). * Energy after TNNMG step with 16 digits. * Energy after nonlinear pre-smoothing with 16 digits. * If the nonlinear pre-smoother is not monotone: Relative monotonicity violation of the smoother with an additional `X` marker for easier grepping.