Const correctness in iterative solvers
The constructors of IterativeSolvers took std::shared_ptr<LinearOperator<X,Y>> and std::shared_ptr<ScalarProduct<X>> as arguments, where the const version actually should suffice, since the corresponding methods are marked as const.
This MR changes the arguments to std::shared_ptr<const LinearOperator<X,Y>> and std::shared_ptr<const ScalarProduct<X>> and adapts the SolverFactory such that solvers can be created from a const operator.
This is a change of the interface but should not lead to problems due to the implicit conversion of std::shared_ptr<T> to std::shared_ptr<const T>.
Edited  by Nils-Arne Dreier