Javadoc
Caller must ensure that at most one compaction is in progress and that no checkpoints
occur when compaction starts and ends. Only one thread may control the compaction
sequence:
1. start
2. scan free list (finds and moves pages in the compaction zone)
3. checkpoint (ensures dirty nodes are flushed out)
4. trace indexes and re-allocate pages which are in the compaction zone
5. scan free list (finds and moves additional pages)
6. forced checkpoint (ensures previous scan is applied)
7. verify; if not, scan and checkpoint again
8. end (must always be called if start returned true)
8. truncate