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.
For this pattern, you could also consider `(opts[:conditions] || []).each`