ReplicatedPG: RWTracker: always set backfill_waiting_on_read=true

Setting it true even if we aren't actually waiting doesn't break
anything else happening, and lets us assert
1) that we're the only doing grabbing the recovery lock,
2) that we have actually taken a recovery lock when dropping one.
(We aren't always doing so now, so this should simplify debugging.)

Signed-off-by: Greg Farnum <greg@inktank.com>
PG: switch the start_recovery_ops interface to specify work to do as a param

We previously inferred whether there was useful work to be done
by looking at the number of ops started, but with the upcoming
introduction of the rw_manager read locking on backfill, we could
start no ops while still having work to do. Switch around the
interfaces to specify these as separate pieces of information.

Signed-off-by: Greg Farnum <greg@inktank.com>
ReplicatedPG: rename start_recovery_ops::started -> ops_begun

Get rid of the stupid aliasing we did for git diff convenience.

Signed-off-by: Greg Farnum <greg@inktank.com>
ReplicatedPG: take and drop read locks when doing backfill

All our interfaces are in place, so now we can actually take and
drop the locks.
1) Take locks in ReplicatedPG::recover_backfill. This is the entry
into the backfill code path, and covers all objects which are
added to backfills_in_flight (via prep_backfill_object_push()). If we
can't get the lock right away, we stop the backfill movement there
until we can do so.
2) Drop the locks in ReplicatedPG::on_peer_recover(), called when the
push is completed.
2b) Further drop the locks on all backfills_in_flight objects in
_clear_recovery_state(), for when we cancel peering.

Signed-off-by: Greg Farnum <greg@inktank.com>