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.

Backport some form of this: bobtail
Signed-off-by: Sage Weil <sage@inktank.com>