etcdserver: add TestRecvSnapshot
*: add testutil pkg
etcdserver: not push ready to readyNode automatically
main: add CORS support
etcdserver: add TestRecvSlowSnapshot
Merge pull request #1118 from unihorn/133

etcdserver: add TestRecvSnapshot
etcdserver: fix sync tests

This is to fix possible testing failures caused by sync tests.

Changes:
1. Get rid of time sleep operations, which introduces uncertainty.
2. Use fake Store.
Merge pull request #1098 from unihorn/131

fix sync tests
client: min client for discovery
Merge pull request #1109 from coreos/client

min client for discovery
Merge pull request #1013 from jonboulle/1013_cors

Add CORS support
store: fix recursive/dir arguments
Merge pull request #1132 from jonboulle/fix_store

store: fix recursive/dir arguments
etcdserver: init time.Time only if Expiration > 0

golang's concept of "zero" time does not align with the zero value of
a unix timestamp. Initializing time.Time with a unix timestamp of 0
makes time.Time.IsZero fail. Solve this by initializing time.Time only
if we care about the time.
Merge pull request #1131 from bcwaldon/1129

etcdserver: init time.Time only if Expiration > 0
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