Services heartbeat with ZooKeeper

Today the heartbeat information of Nova services/nodes is maintained in the DB, while each service updates the corresponding record in the Service table periodically (by default -- every 10 seconds), specifying the timestamp of the last update. This mechanism is highly inefficient and does not scale. E.g., maintaining the heartbeat information for 1,000 nodes/services would require 100 DB updates per second (just for the heartbeat).
A much more lightweight, scalable and reliable heartbeat mechanism can be implemented using ZooKeeper (which on its own can be also used for other purposes, to further enhance scalability and resiliency of Nova).