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.
Is this guarding against calling `locked?` if you didn't provide a block but did provide conditions? Seems like that should either be taken care of in the code and this message won't be useful to a user, or the message should be more helpful to a user.