Raft: log storage interface and multinode integration

This branch introduces a pluggable interface for on-disk storage of logs, and brings MultiNode up to date with some upstream changes in the Node interface (the new Advance method). It's still something of a work in progress, but the next step is to implement this interface in cockroach to make sure it meets our needs before pushing it back upstream.

@spencerkimball @cockroachdb/developers 
well... we should not allow people to get the first entry in the storage. 

There are three cases:
1. Have not done a compaction: index 0 is our placeholder -> do not allow since it is bad.

2. Have done a recent compaction locally: the first entry is correct -> we probably can let user get it.

3. Restored a snapshot: the first entry does not contain the correct entry. it is a placeholder for matching (term,index).

In these three cases, we do not want to return the first entry in two cases.