implement Drain

Similar to WaitGroup, but more appropriate for our use-case of potentially
never calling .Add before .Wait (i.e. if no requests are ever made).