add peer store

This store is designed for node register.

It is used instead of `Peer` for etcdserver to send requests and provide machine infos.

It is necessary to have such a struct to fit: 1. dynamic change on nodes 2. save/load from log/snapshot
prevents fatfingering, forgetting to change all of them later, etc etc.
```
func idKey(id int64) string {
  return machineKVPrefix + strconv.FormatInt(id, 10)
}
```