refactor RecoveryState and RecoveryState::Peering

The goal is to extract the RecoveryState class from the PG class so
that it is easier to maintain, test and reuse in the context of
pluggable placement groups. It reduces the PG lines of code by 30% and
uses about 100 of its methods ( that is 50% of them ).

The PG::RecoveryState sub class is moved to the PGRecoveryState.{cc,h}
files. The PG::RecoveryState::Peering state and its sub-states are
moved to the PGPeering.{cc,h} files.

The PGRecoveryStateInterface abstract class is created (
PGRecoveryStateInterface.h file ) and made a base class of PG. All
references to PG in PGPeering.{cc,h} and PGRecoveryState.{cc,h} are
replaced by PGRecoveryStateInterface. When writing tests, a fixture can
be created with a derived class of PGRecoveryStateInterface and
simulate a rare error condition.

To preserve the scoping of the PG::RecoveryState class and avoid name
clashes, the contents of PGPeering.{cc,h} and PGRecoveryState.{cc,h}
are included in the PGRecoveryState namespace.

Data members previously referenced directly now use
PGRecoveryStateInterface accessors. When possible the accessors are
made const and the calling method is modified accordingly ( using
const_iterator for instance ).

THIS PATCH IS STILL INCOMPLETE. TODO:

* sort PGRecoveryStateInterface.h to group the methods
* cosmetic changes to PGPeering.{cc,h} and PGRecoveryState.{cc,h}
* what about the PGRecoveryState namespace
* what about the class names

Signed-off-by: Loic Dachary <loic@dachary.org>