ObjectContext and SnapSetContext API proposal

The PGRegistry object contains a sharedptr_registry for SnapSetContext
and another for ObjectContext:

    SharedPtrRegistry<hobject_t, ObjectContext> objects;
    SharedPtrRegistry<object_t, SnapSetContext> snapsets;

The side effects and predicates that are not trivial are encapsulated
as PGRegistry, ObjectContext or SnapSetContext methods. Getters are
implemented to be used mostly for debugging and only a handfull of
setters are necessary.

The PGRegistry.h header is ready for review but the rest of the code
is not.  Note, however, that it compiles and runs make check
successfully, to demonstrate that the proposed API is can indeed be
used as proposed.

The methods in PGRegistry.h have names that should be somewhat self
explanatory and the implementation found in PGRegistry.cc remains as
close as possible from what it was before being relocated from PG.cc
or ReplicatedPG.cc. Comments have however been added to the many
methods that create ObjectContexts ( find_object_context,
get_object_context etc. ) to clarify their differences.