Add a basic sendrecv that should be a direct transcription of the C interface

SendRecv is probably mostly relevant when used with Cartesian communicators. Still, it's probably simpler/cleaner to introduce them separately.
This is a simple translation of the C interface for the "simple" types and a async send/recv pair followed by a wait for more complex types.