Conditions hashes

First pass on allowing filtering and locking by hashes (and sql strings) as well as blocks.  Hash and sql based filtering is orders of magnitudes faster than block-based.  Sanitizers are left as blocks because 1) They are trickier to do otherwise, and 2) They operate on the 'shrunk' database and so are not very performance sensitive.

Mixing of block-based locks & filters with hash/sql string based filters is only partially supported.  Given the magnitude of the performance improvements, I'm inclined to restrict to only hash & sql based approaches, but not ready to pull the trigger on that without additional feedback.
So `filter.opts` will be something like `id % 1000 = 0` and `lock_opts` (why not an object like `filter`?) will be `id != 5`, right? How come the `conditions` arg is unused in this case?