Fix detection of obsolete updates with high concurrency workloads.

Previously, we took the first obsolete update in a list and assumed that any update after that would also be obsolete.  This is reasonable at snapshot isolation, where write-write conflicts are not permitted, so there can only be one uncommitted update on the list at a time.

However, at lower isolation levels, there can be multiple uncommitted updates on a list, and they can commit out of order.  The result was that there can be an uncommitted update after the first obsolete update, and WiredTiger could write to memory after it was freed.

The fix is to only free the contiguous obsolete updates at the end of a list.

closes #639