avoid race condition when reporting metrics
avoid race condition when reporting metrics

Summary:
It's possible when a thread is reading **outgoingRate_** in ```getResponseRate()```, another thread is running ```returnedResponse()``` and updating  **outgoingRate_** too.  So **outgoingRate_** needs to be protected too in reporting metric path.

Due to the fact that ```getResponseRate()``` is also used in the path of deciding accepting or rejecting, which also acquire the mutex.   We can't acquire the mutex in ```getResponseRate()```.   Instead, the diff is acquiring the mutex in ```reportMetrics()```.

after this diff, the locking functions: ```dequeue()```, ```returnedResponse()```,  ```admit()```, and ```reportMetrics()```.  None of them can be downstream of anyone else.

Reviewed By: yfeldblum, stevegury

Differential Revision: D17766128

fbshipit-source-id: d967ced034f31c622c02cb9b8d884afe211e5cab

facebook/fbthrift,facebook/fbthrift,facebook/fbthrift,facebook/fbthrift,facebook/fbthrift,facebook/fbthrift,facebook/fbthrift,facebook/fbthrift,facebook/fbthrift