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
- check the validity of read data after having verified the shouldRetry flag