modernize pointer handling

use shared_ptr instead of manual delete's
utilize the preprocessor to keep template boilerplating at acceptable levels
added a bunch of useful debugging options
support dune's two level preconditioner
allow using a different preconditioner for the multiplier block
added: heuristic for enabling the two-level preconditioner

a simple approach based on average cell aspect ratios
improved loggerhelper for use with multithreading
added: add support for UMFPACK
added: OpenMP support

threads are used during
 - assembly phase (two-color mesh approach) - amount of threads in
   flight is only limited by mesh dimensions.
 - setting up the preconditioner for the multiplier block - amount of
   threads in flight unlimited in principle
 - solving the 6 load cases - limited to 6 threads