AMPI #1639: correct MPI_IN_PLACE handling in collective routines
handle_MPI_IN_PLACE() sets sendbuf equal to recvbuf if sendbuf is
MPI_IN_PLACE. For collective routines, we also need to set the
sendcount, sendtype, and send displacements to their recv counterparts.
For the gather routines, extra care must be taken to set the sendbuf
to the correct displacement in the recvbuf. For the alltoall routines,
all send count/type/displ info must be changed too.
Also avoid error reporting false positives, and add early return to
copyDatatype to avoid copying in place.
Change-Id: Idf46a78a3ba4e38ece99c872bfd9316b966e7d01