raft: do not decrease nextIndex and send entries for stale reply

We need to handle message duplication and reordering.

When follower denies a `msgApp`, it attaches the msg with the index of the `msgApp` that it denies to. 

When leader receives a rejection, it checks:
if the follower has matched, the rejection must be stale and should ignore.
if the next of the follower does not match with the rejected index, the rejection must be stale and should ignore.
it may have availability problem if there is message reordering imo:
A, B, C are the cluster.
1. A is the leader of term 4, and has uncommitted log {Term: 4, Index: 10}
2. B sends back msgAppResp{Index: 10}, but doesn't reach A yet
3. C becomes the leader of term 5 and commits {Term: 5, Index: 10}
4. A becomes the leader of term 6
5. A receives message at step 2, and think B have matched with Index 10
6. B cannot be synced from A anymore.
This case could happen easier when B cannot communicate with C.