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
etcd: manually construct listeners
transport: wrap net.Listener with TLSInfo
etcd: wire up client TLS flags
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.
wal: remove logging messages

These are noisy and unhelpful by default. We can re-add if at some point
we reintroduce debugging/multiple log levels.
discovery: init commit
discovery: add fast path
discovery: add d.selfKey()
discovery: add tests for sortableNodes
discovery: store size inside /[cluster]/config
discovery: key config -> key _config
discovery: remove redundant comment for createSelf