Remove reply callers once the reply has been seen.

Without this change, onFailure() is always called when asynchronous messages reach their
timeout. The old behaviour makes managing state in asynchronous applications more difficult than
it needs to be.