Fix a few potential performance problems in eviction.

Application threads should only do eviction when the cache is full(!).
Don't rely on reading the number of candidates before getting the lock.
Set "disk_snap_txn" even if eviction fails, don't retry until the oldest ID has moved forwards.