Make chunked upload jobs robust in face of exceptions.

If an exception occurs when creating the new image page during
PublishStashedFile (for example, if ExternalStorage servers
become overloaded), the job is aborted, but the current
transaction is not aborted. Then the next job comes along, does
$dbw->begin(), which implicitly commits the current open
transactions, causing database corruption (entries in page table
with page_latest = 0).

This patch ensures that if some unknown exception occurs during
the job, that the database gets rolled back to a known good state.

I also plan to make a separate patch to make the recordUpload
code handle exceptions properly. Nonetheless, I think its
important that the general job code be as robust as possible.

Bug: 32551
Change-Id: Icb5e06e81700e5dcf0d4e739c7b2bb3221e718b8
When uploading a new file, save to memcached directly after commit

Previously if an exception was thrown when creating the description
page, the old (negative) memcached entry would not be purged, and
the file would appear not to exist until 24 hours later.

This way, as soon as we have the image row committed to db, we
change the memcache entry, so memcache of image row always looks
like actual image row.

Bug: 32551
Change-Id: I9c260e9a4a1e0d6ade1771542dd834f969904cef
Merge "When uploading a new file, save to memcached directly after commit"
Merge "Make chunked upload jobs robust in face of exceptions."