LSM optimizations:

1. improve merge algorithm, particularly when there are multiple merge threads;
2. get incrementally more aggressive about merging, rather than all or nothing;
3. avoid the checkpoint lock in common LSM paths.
Go back to holding the checkpoint lock when flushing in-memory LSM chunks.  Otherwise, we can race with application checkpoints in test/format.

refs #769
Merge pull request #769 from wiredtiger/lsm-opt

LSM optimizations