First draft of a new IO API for the PageCache.

The pin() and unpin() methods are going away from the public API, and will eventually become internal, I presume.
The idea with the new io() API is that it does not distinguish between only reading a single page, and scanning through a range of pages.
It also features a revised interpretation of the cursor concept, that is more closely aligned with the academic one.
Second draft of the new page cache IO API

The pin() and unpin() methods are still going away, but the concept of the PageIO consumer
has been dropped. Instead, we access the page through the cursor as a facade, similar to how
things works with plain pin() and unpin().

The next() method *may* stay on the same page, if the page needs to be reprocessed for some
reason. We therefore always have to do our page processing in a while loop or similar. This
will be useful when we try implementing a page cache that uses sequence locks.
Port the NodeStore over to the new API

Also fix a bug where pages that had been added to the file, but not yet evicted, would not be accessible to cursors that had NO_GROW specified.
PageCache: PF_SHARED_LOCK now implies PF_NO_GROW
Third draft of the new PageCache API
Speed up PropertyTransactionStateTest
Port the rest of the stores over to the new PageCache API
Test concurrent reads & writes for the new PageCache API
Merge pull request #2580 from chrisvest/2.2-pagecache-scan

New PageCache IO API