OSD: add PGQueueable

Signed-off-by: Samuel Just <sjust@redhat.com>
osd/: convert snap trimming to use OpWQ

Signed-off-by: Samuel Just <sjust@redhat.com>
osd/: convert scrub to use the OpWQ

Signed-off-by: Samuel Just <sjust@redhat.com>
osd/: move recovery into opwq

Signed-off-by: Samuel Just <sjust@redhat.com>
osd/: make last_peering_reset and deleting checkable without pg lock

We will want to be able to quickly determine whether we can discard
events without grabbing the pg lock.

Signed-off-by: Samuel Just <sjust@redhat.com>
OSD: respect recovery deferral and pausing, move into OSDService

First, we move the recovery queueing machinery into OSDService for
simplicity and clarity.  blocked_recovery_ops holds recovery ops
pending while recovery is paused or deferred.  During tick(), we
scan the blocked_recovery_ops list to discard any obsolete ops to
avoid building up an unbounded number of obsolete recovery ops.

Signed-off-by: Samuel Just <sjust@redhat.com>