Fix a bug where the stores did not properly check for consistent page cache reads.

* This fixes a bug where "Record not in use" exceptions could pop out of the various stores seemingly at random.
* Also removes the reliance on exceptions for control flow when asserting that records likely exists in the stores.
* Also makes the PageCacheRule automatically inject inconsistent reads by default.
* And makes the header read in KeyValueStore use a shared_lock
Merge pull request #3344 from chrisvest/2.2-inconsistent-reads

Make sure we only do the record-in-use check on consistent reads