Response cache & client command IDs for request idempotence.

Summary:
Introduced the ResponseCache object which writes responses for any
mutating requests which have a client command id (ClientCmdID)
specified to the underlying engine. This allows retries and replays
to have idempotence by consulting the cache before resubmitting the
request to Raft.

Responses are cached after Raft plays a command against the underlying
state machine. Responses are stored in the engine in the local keyspace
with a prefix of range ID, followed by client command timestamp and
finally client command random. The client command timestamp provides
locality when looking up responses.

Clients not specifying a command ID have no idempotence.

The ResponseCache object maintains a map of inflight requests, keyed
by the ClientCmdID. Retries which arrives while a command is already
inflight block until the original request completes and all waiters
will then receive the cached response.

Test Plan: go test

Reviewers: bdarnell, jiangmingyang, petermattis

Reviewed By: petermattis

Subscribers: petermattis, andybons, team

Differential Revision: http://phabricator.cockroachdb.org/D123