move log, ondisklog, missing from PG to PGLog

PG::log, PG::ondisklog, PG::missing are moved from PG to a new PGLog
class and are made protected data members. It is a preliminary step
before writing unit tests to cover the methods that have side effects
on these data members and define a clean PGLog API. The guidelines
followed for this patch are:

* const access to the data members are preserved, no attempt is made
  to define accessors

* all non const methods in PGLog, no access to non const methods of
  PG::log, PG::logondisk and PG::missing are provided

* when methods are moved from PG to PGLog the change to their
  implementation is restricted to the minimum.

* the PG::OndiskLog and PG::IndexedLog sub classes are moved
  to PGLog sub classes unmodified and remain public

Arguments are added to most of the methods moved from PG to PGLog so
that they can get access to PG data members such as info or log_oid.
A bound method pointer to PG::remove_snap_mapped_object is provided to
the merge_log, rewind_divergent_log and merge_log_entry.

The proc_replica_log and write_log functions are split in two instead
of adding arguments to the prototype because the side effects on PG
are isolated at the beginning and the end of the method.

A const accessor is provided for each of them ( PGLog::get_log,
PGLog::get_missing, PGLog::get_ondisklog ) but no non-const accessor.

The PGLog::activate_not_complete method is created by extracting 13 lines,
unchanged, from PG::active.

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