client: always remove cond from list after waiting
The signal method removes conds from the list after it signals. That's
not okay if the cond triggers for some other reason; an invalid Cond*
will remain on the list and get signaled later.
Make the wait_on_list() helper remove it; use that in several callers;
explicitly do the removal in the remaining callers.
Change signal_cond_list() to not clear the list; rely on the signalee's to
do that. Audit all users and make sure they are either using the
wait_on_list() helper (which removes its Cond) or do the remove explicitly.
Backport some form of this: bobtail Signed-off-by: Sage Weil <sage@inktank.com>