support IN_PLACE in reductions

the MPI_Reduce implementation allocates a buffer everywhere, but this is
unnecessary.  it is just tedious to work around it and i do not care so
much right now.