Compaction cannot run at the same time as a checkpoint: the problem is
that checkpoints review page reconciliation information and checkpoints
update page reconciliation information.   Lock-out checkpoints while
compaction is running.

Compaction no longer uses the eviction server, it only coordinates with
eviction -- clean up a couple of comments.
Compaction visits all pages, both leaf and internal.
Minor comment update.
Add a compaction operation to test/format.
Add a statistics counter for compaction operations.
There are really two issues in reconciliation of internal pages: we have
to both avoid pages being written because it messes up the block lists,
but we also have to avoid pages disappearing from under us when we're
writing internal pages.  Compaction has the same problem as checkpoints:
rework the code so checkpoint and compaction are almost the same code.

This means __wt_sync_file() does all the work, it's no longer called
twice from __wt_bt_cache_op(), (actually a simpler approach than
before).  Merge SYNC_INTERNAL and SYNC_LEAF into SYNC_CHECKPOINT.

Rename btree->checkpointing to be btree->internal_lockdown, it's now
used by compaction.
Merge branch 'develop' into compact-checkout
Compaction doesn't go through reconciliation (yes, I'm an idiot).
whitespace.
Back out a chunk of my change: compaction doesn't call reconciliation (well,
more importantly, compaction doesn't examine the CHILDREN of internal pages),
which means that 1 pass and hazard references are sufficient.
Fix up the comment/explanation for WT_REF_EVICT_WALK.
Merge pull request #433 from wiredtiger/compact-checkout

Compaction can't run at the same time as checkpoint.