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 

unstableState() will return nil if we do not need to persist anything. You prefer a `&` operation?