Add a generic factory for solver setup using configuration from a ParameterTree

This is a followup on !5 (closed) and !1 (closed).

The idea is to allow creating solvers / preconditioners from ParameterTrees.

A solver (including preconditioner) should be configurable via an ini file, similar to (we might want to change the semantics slightly in some places...):

[solver]
precond = SeqSSOR
solver = CGSolver

[SeqSSOR]
iterations = 1
relaxation = 1.8

[CGSolver]
reduction=1e-9
maxit = 5000
verbose = 3

Necessary steps:

  • make interface classes really dynamic (see !84 (merged))
  • add constructors taking a ParameterTree (see !315 (merged))
  • use these new constructors in a solver factory (see !312 (merged))
  • rewrite the factories to use the ParameterizedFactory in dune-common (see !312 (merged))
  • review and cleanup the ParameterTree "interface"
  • remove static AMG configurations (coarse solver, smoother, etc) (explicit dispatch in !312 (merged))
  • switch Hierarchy<T> to use std::shared_ptr or std::unique_ptr for internal memory management instead of manual new/delete)(see !274 (merged) and !333 (merged))
  1. introduce a value semantics wrapper class for the polymorphic interface classes
  2. add concepts for simple precompilation for a range of field types, e.g. vectorized data.
  3. review the concepts of how to instantiate and pre-compile the factories
Edited by Christian Engwer