raft: fix heartbeat

heartbeat should be the same as normal message append with previous index equal to next -1. 
heartbeat should always be accepted by a synced follower. 

if previous index is smaller than the log offset (which due to snapshot), we can just send a heartbeat with log offset. It will cause a rejection from the unsynced follower. After receiving the rejection, the leader will send a snapshot.
i hate to use reflect when i can avoid. 
i will compare the to field.