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.
[Sovers] Corrects printed and stored no of iterations for no convergence.

Previously if the solver did not converge the number of iterations
that was printed and stored was one higher than the actual value.
Adds an adapter that turns an InverseOperator into a Preconditioner.

This fixes FS #1224
Added missing source file from last commit
Split {solvers|preconditioner}.hh to seperate interface from implementation.

The last commits caused compile errors for e.g. clang as I used
incomplete (only forward declared) types in template classes.
This patch moves the definition of InverseOperator and Preconditioners
from the headers solvers.hh and preconditioners into new separate
headers solver.hh and preconditioner.hh. This allows to include these
definitions in the previous headers without cause circular include directives.
add missing includes
ignore *~
Removes unsused variable warning during aggregation
Merge branch 'master' into feature/amg-sharedptr to get rid off warning.