teach store.Store about CompareAndDelete
track CompareAndDelete stats
add compareAndDelete event action
add the CompareAndDelete command
support CreateAndDelete through the v2 server
keep the Delete tests together
implement recursive for CompareAndDelete in the store
update the v2 server to support recursive on CompareAndDelete events
merge compareAndDelete
refactor(compareAndDelete)
tests(get_handler) loosen the time assumption for the un
fix(bench): initial commit
fix bench
Merge pull request #411 from xiangli-cmu/bench

Bench
fix(error.go): fix typo in comment
refactor(v2/tests): don't repeat construction of full test URL
fix(v2/tests): make comments and tests agree about what's being tested

In cases where the comments were incorrect, this changes them to agree
with the tests.  In cases where the comments were correct, this extends
the tests to cover the behavior described in the comment.
feat(v2/errors): Use more appropriate HTTP status codes for error cases.

This commits adds test coverage for all the error and non-error cases
described below, but only the behavior of the 403, 404 and 412 cases
are changing in this commit.

When setting a key results in a new resource, we asset an HTTP status
code of 201 (aka "Created").

When attempting to get a resource that doesn't exist, we assert an
HTTP status code of 404 (aka "Not Found").

When attempting to delete a directory without dir=true, or a non-empty
directory without recursive=true, but the request is otherwise valid,
we assert an HTTP status code of 403 (aka "Forbidden").

When a precondition (e.g. specified by prevIndex, or prevValue) is not
met, but the request is otherwise syntactically valid, we assert an
HTTP status code of 412 (aka "Precondition Failed").  However,
prevExist is handled slightly differently.  If prevExist=false fails,
then this is treated like a failed precondition, so it should use
PreconditionFailed.  But, if prevExist=true fails, then this is
treated like other requests that require the existence of the
resource, and uses NotFound if the resource doesn't exist.

We continue to assert an HTTP status code of 400 when the request is
syntactically invalid (e.g. when prevIndex=bad_index).
Merge pull request #412 from mojotech/cas/403-proper-http-statuses

Use more appropriate HTTP status codes for error cases.
fix(event_history) fix a bug in event queue