Create communicator interface

The cartesian communicator is a bit easier to work with if we create an
OO interface around it