Reduce the impact of checkpoints on cursor operations

This is an experimental branch that tries to reduce the impact of locking during checkpoints on ordinary operations.  In particular, checkpoints used to hold the schema lock, which blocked concurrent threads from opening tables until the checkpoint completed.  With this change, most cursor and table opens would be able to proceed during a checkpoint.

These changes are not ready for merge.  They need further cleanup, and there is still an occasional failure in test/fops, where a cursor open sees a table without its column group.
The case here is test/fops, which deliberately makes cursor opens race with table creates, and expects to see the complete table or ENOENT.  Without this change, the cursor open can fail with an "incomplete table" error.