Added optional global communicator argument to CommTools.

This is useful for example when you want to unite two communicators
but don't want to use MPI_COMM_WORLD as the global communicator over
which they are ensured to unite (see the communicator Venn diagrams
in the domain model). If no optional communicator is provided, these
functions will behave as they did previously by operating with
MPI_COMM_WORLD as the background communicator.