Add support for routing all storage operations through raft.

The tests pass with this change most of the time but there are some
timing issues around the initial election and tests using IsTrueWithin,
so everything still uses noopRaft until that can be fixed.

@spencerkimball @cockroachdb/developers 
I'm examining the error message specifically because it's testing code - in prod we may want to just return on everything but for tests we want to discover if any other kinds of errors are happening. In fact, we should probably panic instead of just log.Errorf.

It is weird that there is no clean and well-documented way to classify errors like this. They define a public constant for ErrWriteToConnected but not errClosing (https://github.com/golang/go/blob/8eb8b40a4965c0bd5f96dfdfc5b037925f630c2d/src/net/net.go#L284), and they don't define functions like os.IsNotExist(error). It will "usually" return an OpError which has a Temporary method, so maybe that's enough. The error pipeline in the net package is complicated.