Fix a problem with the cache's dirty-byte calculation; a page can be
marked clean or dirty while the page's footprint is being updated (for
example, the WT_UPDATE "obsolete" discard function can obviously be
updating the page's footprint when the page is clean or dirty).

Handle this by saving a copy of the last value used to increment/decrement
the cache's dirty-byte count for this page, and when the page transitions,
use that saved value to reverse the increment/decrement, not the page's
current footprint.

This means the cache's dirty-byte information lags reality because each
change to the page's footprint won't be reflected in the cache until the
page transitions.  To keep that from being too much of a problem, update
the page's cache dirty-btye information as part of reconciliation, even
if the page isn't transitioning from dirty to clean.

If updating during reconciliation is insufficient, we could also do a
similar information update anywhere we know that only a single thread
of control can being doing the update.  For example, when a
serialization function calls __wt_page_modify_set(), we could check and
if the saved footprint value is sufficiently different from the current
footprint value, we could do the same information update there, since
only a single thread can be doing a serialized update on a page at any
time.
Merge branch 'develop' into cache-dirty-bytes
Merge branch 'develop' into cache-dirty-bytes
Merge branch 'develop' into cache-dirty-bytes
Update a couple of comments for clarity.
spelling.
Merge branch 'develop' into cache-dirty-bytes
Merge branch 'develop' into cache-dirty-bytes
Merge branch 'develop' into cache-dirty-bytes
Merge branch 'develop' into cache-dirty-bytes
Cleanup after merge: remove some duplicate code / comments.
Move WT_PAGE.bytes_dirty into WT_PAGE_MODIFY.bytes_dirty, there won't be
dirty bytes to track unless the page has been modified, and it saves 8B
on read-only pages.

Move bytes_dirty resolution from __wt_page_out() to __wt_cache_page_evict(),
we're updating up our cache information there anyway, it makes more sense.
Add __wt_cache_dirty_incr() to match __wt_cache_dirty_decr(), and make
them look the same.
The global dirty byte count can go negative if there is a race freeing updates during a checkpoint.  That's okay (or at least, not terrible), limit the damage.

Also reinstate Keith's change to generate an unconditional error message if the dirty page count goes negative.

refs #699
Fix last commit: unmerged changes.
Cut the 1.6.5 release.
Added tag 1.6.5 for changeset 03ab950d31ed
Bump the version on develop to 1.6.6.
Merge branch 'develop' into fine-grained-durability