Create a special isolation level for eviction.

This avoids futzing with the transaction context, and also means that eviction of large pages is (slightly) more likely to succeed, because the oldest ID can move while reconciliation is splitting the page.
Only try eviction if there is a good chance it will succeed.
Don't queue pages for eviction unless there is a good chance it will succeed.
Use fewer than 256 page locks to see whether L1 cache performance improves.
Give in-memory splits a chance to work.  Stall if we're waiting on the oldest ID to move forwards.  Move most of the forced eviction logic to btree.i.
Tweak forced eviction a little more: don't retry, but give in-memory splits more chance of happening.
Add statistics tracking forced eviction.