(#1) Move cache eviction control to policy and strategy

Previously, the store was evicting everything on a full cache. Now the
policy is telling the strategy to evict everything. This allows for
easier custom cache eviction code.

This PR also includes a bunch of refactors needed to make this feature
happen, as well as the Lock, an occasional mutex (similar to a
read/write lock, with a different concept of read/write).

Also addressing race conditions that were discovered in the process (and
are covered by tests)
Merge pull request #18 from cmaher/1-cache-eviction-pr

(#1) Move cache eviction control to policy and strategy
(#10) Improve integration tests, PATCH support, and sync completeness

Tie sync completeness to storage completeness
Merge pull request #19 from cmaher/10-integration-tests

(#10) Improve integration tests, PATCH support, and sync completeness
Merge pull request #20 from cmaher/minor

Merge minor into master; 0.2.0 feature-complete