Fix cases where the oldest transaction ID could get ahead of a running transaction's snapshot.

Switch from a generation number approach to simulating a read-write lock, and only update the oldest ID if there is no contention.

refs #643, #657
Merge pull request #643 from wiredtiger/obsolete-txn-race

Fix a race updating the oldest active transaction ID in the system.

Resolves a test/format failure: illegal cell and page type combination