Add pluggable ServiceGroup monitoring APIs

Summary:
* provide a pluggable ServiceGroup  monitoring API
* refactor the old DB-based implementation to the new API

Currently nova compute nodes periodically write to the database (every
10 seconds by default) to report their liveness.  This implementation
factors out this functionality and make it a set of abstract internal
APIs with a pluggable backend implementation.  Currently it's named as
ServiceGroup APIs.

With this effort, we are hopeful to see the following benefits:

 * We expect to see more backend implementations in addition to the
default database-based one, such as ZooKeeper (as described in
blueprint zk-service-heartbeat) or rabbitmq heartbeat based.

 * We expect the code to live in openstack-common so projects other
than Nova can take advantage of the internal APIs.

 * Lay the foundations to use lower overhead heartbeat mechanisms
which scale better.

 * Other than reporting whether a node in a service group is up or
down, the code may also be used to query for members.  Other parts of
the code could also take advantage of the new APIs. One noteable
example is the MatchMaker in the rpc library, which may even become
redundant. We have been working with Eric at Cloudscaling to see how
this fits with the matchmaker. It is likely that this code will need
to be used, at least by the peer-to-peer based RPC mechanisms, to
implement the new create_worker method.

Co-authored-by: Pavel Kravchenco <kpavel@il.ibm.com>
Co-authored-by: Alexey Roytman <roytman@il.ibm.com>

Change-Id: I51645687249c75e7776a684f19529a1e78f33a41