Add code to detect if the database file is moved or deleted out from under
SQLite and return an SQLITE_IOERR_NODB.
Only error out on a database file move when attempting to start a write
transaction.  Assume read transactions are still safe.  And make the error
SQLITE_READONLY_DBMOVED instead of SQLITE_IOERR_NODB.
Add the SQLITE_READONLY_DBMOVED error code to the sqlite3ErrName() function.
Remove some commented-out code from sqlite3BtreeMovetoUnpacked() to try to make
it more readable.
Use memcmp() instead of the BINARY collating function where possible, for
a performance boost.
Performance optimization to the moveToRoot() subroutine in btree.c.
Actually look at i-node numbers to determine whether or not the database
file has moved.
Back out the new device capability.  The determination of whether or not a
file has moved is now done strictly using a file-control.
At the start of each write transaction, check to see if the database file has
been moved, and if it has refuse to start the transaction, returning an
SQLITE_READONLY_DBMOVED error code.
Increase the version number to 3.8.3.
Interchange two conditions in an "if" statment in sqlite3PagerAcquire() for
very slight (0.06%) overall performance increase.
Avoid unnecessary calls to sqlite3VarintLen() from the OP_MakeRecord opcode.
Another simplification to the OP_MakeRecord opcode, making it slightly
faster and very slightly smaller.
Use putVarint32() instead of putVarint() for a quantity that can never
exceed 2GiB - 1.
Avoid unnecessary no-op calls from getAndInitPage() to btreeInitPage() 
in the btree.c logic.
Use memmove() rather than a home-made copy loop in dropCell() of btree.c,
for a size reduction and performance improvement.
Use memmove() rather than a home-made copy loop in insertCell() too.
Avoid unnecessary (no-op) calls to sqlite3DbFree() from sqlite3VdbeMemRelease().
Fix an incorrect test number in the output of the speedtest1.c program.  No
changes to the test algorithms.
Performance optimizations for sqlite3VXPrintf().