Allows copying AMG and using them independently.

This patch introduces shared_ptrs at various places,
namely for the matrix hierarchies and coarse solvers.
This allows copying an AMG and using the same matrix
hierarchies in both preconditioners. Thus one could
solve the same system for various right hand sides,
where each solve happens in a different thread.
Prevents calling MPI_Comm_free after MPI_Finalize.

With OpenMPI there appeared cases where MPI_Comm_free
was called after MPI_Finalize. This was caused by the
destructor of OwnerOverlapCopyCommunication being called
after MPI_Finalize.
This patch moves the destruction out of the main method.
If MPI 2 functionality is available we also check whether
MPI_Finalize was called before freeing the communicator and
only call free if not.
Allow copying AMG even after calling pre()
Print time including coarse solver setup.
Support copying of FastAMG and usage in different threads.
Merge branch 'master' into feature/amg-sharedptr to get rid off warning.
Do not crash in find() if array is empty

This fixes FS 1292, but with my own slightly different patch.
simplify return statement
Cleanup: don't hand-implement binary search -- use std::lower_bound instead
Do not include <complex>, it is not used
Fixes compilation error due to missing header.
[BlockVector]
modify constructor with capacity to catch at least some of the
wrong invocations (see doxygen comment).
Fixes overwritten right hand side for FastAMG with one level.

Unfortunately, SuperLU always overwrites the right hand side with
the solution. Therefore we now copy it if there is only one level
in the matrix hierarchy of AMG.
add header to Makefile.am to make nightly build happy
wrong header files added in commit e193b96ca295e4fd5b7d56a2acc04d9599525a9d
removed again - sorry about that.
[CMake] Fixes typo in header list and thus installation
[Bugfix][SuperLU] Use a pointer and not a reference for pointing.

A reference is an lvalue. Assigning to it later changes the state
of the rhe referencee (and not the reference). Therefore the code
actually stored references to the right hand and left hand side.
In the case where we did not want to reuse vectors we created two
dense SuperMatrices to used in this apply call and then assigned
them to the references. In fact we actually overwrote the right
and left hand side by doing this.

This patch uses pointers to accompish the intended behaviour, i.e.
point to the correct dense matrices, the ones stored in SuperLU
or the ones stored in SuperLU::apply.
[Bugfix][SuperLU] Use a pointer and not a reference for pointing in apply(T*,T*).

A reference is an lvalue. Assigning to it later changes the state
of the rhe referencee (and not the reference). Therefore the code
actually stored references to the right hand and left hand side.
In the case where we did not want to reuse vectors we created two
dense SuperMatrices to used in this apply call and then assigned
them to the references. In fact we actually overwrote the right
and left hand side by doing this.

This patch uses pointers to accompish the intended behaviour, i.e.
point to the correct dense matrices, the ones stored in SuperLU
or the ones stored in SuperLU::apply.
Merge remote-tracking branch 'origin/master' into feature/amg-sharedptr

Resolved conflicts:
	dune/istl/paamg/fastamg.hh
[Bugfix][AMG] Move storage of iterators from class to method scope.

Storing the iterators over over the AMG hierarchies as class member
is a really bad idea if one wants to allow the reuse of theses AMG
hierarchies in different threads. This patch creates a private struct
for collecting the iterators over the hierachies. An instance of this
struct is created in apply and passed to the solution algorithms. Thus
each apply uses its own context of iterators.