Change compaction into one-pass over the cache.

@michaelcahill, this change builds on the page-leaf-cell branch.  I believe that now that reconciliation does page locking so compaction doesn't race when looking at page modification structures, it's possible to do compaction in a single-pass: set the compaction-in-progress flag and make sure we don't race with eviction or checkpoints.  Obviously, that has a couple of advantages, it's going to be faster for big cache data sets, and we don't have to turn off eviction of the file while we're reviewing the in-memory pages.

I've put it on a separate branch because I'm not 100% sure that what I'm doing with eviction is OK -- it looks right to me, but I'm prepared to find out I've forgotten about something and this can't work.