Don't grab the checkpoint lock every time we update LSM metadata.  We often have an exclusive lock on the LSM tree at this point (blocking ordinary cursors), so waiting on the checkpoint lock here can show up as application latency spikes.

The reasoning for waiting here was if a checkpoint is in progress, the LSM metadata could become out-of-sync with the tree.  That is, the LSM metadata could reference a chunk that is not part of the checkpoint.  But that is already prevented by the schema lock: chunks cannot be added or removed from the tree without first getting the schema lock, and checkpoints hold the schema lock throughout.
Don't do "bad" merges just because we have multiple threads: only consider small merges after getting aggressive.
Merge pull request #724 from wiredtiger/lsm-optimizations

Some LSM optimizations
Only free the hazard array during connection close.

We saw a case where session->hazard was NULL, so I'm hoping that avoiding any frees during runtime might help.
whitespace
Avoid divide-by-zero.
Fix report_interval and read_thread usage. #725
Fix warning #725
The spinlock statistics are relatively large (about 10KB), don't include
them in the WT_CONNECTION_IMPL structure unless we're configured for
pthread_logging mutexes.  (It's hard to allocate them on demand because
the spinlock functions can't return errors, so I used an #ifdef instead.)
Minor cleanup of hardware.h, shuffle some things around, improve lint
versions of memory barrier macros.
A couple of minor tuneups: WT_PAGE_DISK is gone, (void) followed by
an identifier is what we're interested in, not non-identifiers.
KNF
Replace the per-btree handle spinlock with an array of 256 spinlocks in
the connection structure.   When a page is first modified, the
sequentially next spinlock is assigned to the page, and then the page
uses that spinlock to serialize its modifications.

Reference #721.
Don't block looking for obsolete WT_UPDATE structures to discard, if the
page's spinlock isn't available, just keep going.
whitespace
Change WT_WITH_DHANDLE to stay away from the caller's namespace.
New large LSM config with multiple merge threads and merge sleep. #722
I can't figure out how to keep long titles from being truncated in the
plot output, textwrap them in the python script.
Rename the block manager's lock for logging, it doesn't have anything
to do with higher-level checkpoints.
Fix the trylock call, it returns 0 when the mutex is acquired.