Handle bad connections
This MR makes some changes that prepare Praefect for failover:
- register nodes by ID instead of by storage name
- adding datastore methods for failover
- adds the concept of a "connection down handler" that updates the datastore when a connection is down
Edited by John Cai