refine request handling to support MPI idioms
The only change in behaviour is that finishedRequest() will now always call MPI_Test. The previous code had a fast-path to skip that if the request was already inactive. Changing this just pushes that no-op behaviour into MPI_Test(), which means it will mostly trigger progression.