Raft log

Prepare for persistency. 
We need to persist:
1. new log entries
2. term change
3. vote change
4. configuration change (via persist commitIndex)
before send out any reply message after Node.Step. 

The workflow will be 
```go
n.Step(m)
wal.SaveEnts(n.UnstableEnts())
wal.SaveState(n.UnstableState())
peerHub.Send(n.Msgs())
```
@bmizerany @unihorn 

I prefer not allocating when we don't need to. Just use the zero value of State. Add a method s.HasChanged() that:

```
return s == State{}
```