fix(raft_server_stats): set startTime when init

This helps one-node cluster get rid of bogus startTime.
Fix typo
docs(discovery): update cluster finding process
Merge pull request #748 from unihorn/73

docs(discovery): update discovery process based on the change
docs(upgrade): instructions for upgrade to v0.4
Merge pull request #740 from unihorn/67

docs(upgrade): instructions for upgrade to v0.4
fix(peer_server): graceful stop for peer server run

Peer server will be started and stopped repeatedly in the design.
This step ensures its stop doesn't affect the next start.
The patch includes goroutine stop and timer trigger remove.
chore(server): rename daemon to startRoutine

For better understanding.
Merge pull request #675 from unihorn/56

fix(peer_server): exit all server goroutines in Stop()
Merge pull request #770 from shawnps/patch-1

Fix comment typo
refactor(peer_server): remove standby mode in peer server
tests(snapshot): expand reasonable range for index

snapshot file was createed with name '0_503.ss' and '0_1010.ss' when testing.
Merge pull request #771 from unihorn/80

refactor(peer_server): remove standby mode in peer server
feat(peer_server): stop service when removed

It doesn't modify the exit logic, but makes external code know
when removal happens and be able to determine what it should do.
Merge pull request #773 from unihorn/82

tests(snapshot): expand reasonable range for index
refactor(server): add Client struct

This is used to send request to web API.
It will do this behavior a lot in standby mode, so I abstract this
struct first.
feat(join): check cluster conditions before join
chore(config): move Sanitize and Force check to boot process

Make Load function just load parameters. So etcd instance could
use Config struct to start service.
refactor(tests/server_utils): use etcd instance

Remove duplicated etcd start code.
fix(etcd): exit 0 when removed