raft: add Configure, AddNode, RemoveNode

Configure is used to propose config change. AddNode and RemoveNode is
used to apply cluster change to raft state machine. They are the
basics for dynamic configuration.
etcdserver: add AddNode, RemoveNode

AddNode and RemoveNode is used to propose config change to the cluster.
If succeeds, it will add/remove node from the cluster.
etcdserver: Config.Id -> Config.ID
raft: refine comment for raft.pendingConf
raft: use EntryType in protobuf
etcdserver: use ConfigType in protobuf
raft: use pb.Config instead of []byte for Configure
raft: refine comments for Configure
etcdserver: correct X-Etcd-Index header

This adds an EtcdIndex field to store.Event and uses that as the header
instead of the node's modifiedIndex. To facilitate this in a non-racy
way, we set the EtcdIndex while holding the lock.
raft: Config -> ConfigChange

Configure -> ProposeConfigChange
AddNode, RemoveNode -> ApplyConfigChange
transport: no need to set RootCAs in TLSInfo.ServerConfig
etcdserver: pass http client into Sender
etcd: manually construct HTTP client for peer communication
transport: add TLSInfo.ClientConfig
transport: build TLS config in NewTransport
etcd: wire up peer TLS flags
etcdserver: Peers.Pick returns just an addr
etcdserver: pass scheme into send
etcdserver: determine scheme based on TLSClientConfig
etcd: use TLS in proxy transport