ImageUploadFormHelper was refactored into a nicer singleton pattern, with no need for 'this' or 'that' to refer to private variables or functions.
- Single-file Ajax image upload is (very) basically working. Need to make it multi-file upload now.
- Added jquery.form.js, a third-party JS module.
- Slightly refactored find_dupe_image().
Multi-file Ajax image upload is (very) basically working.
Image upload form: a lot of refactoring, and a lot of changes to the status display... but it all needs a lot of testing.
Image upload form: various fixes. Also, now it properly skips files that are deemed not uploadable, and disables all options and buttons once the upload button is clicked.
Image upload form: - changed the styling of the upload table entries.
- added links to the post-upload "Uploaded" messages, going to the page of the newly uploaded image.
- added titles (mouseover text) to the links that are shown on both pre-upload and post-upload.
Rearranged the image upload page, so that the options come first, followed by the image file field, upload button, and file table.
- Changed the look of the upload file table, including separating the file summary out from the table and adding table borders.  Still a work in progress.
In the image upload code, changed the view variable, template variable, HTML id, and CSS class names to use underscore separators instead of hyphens or camelCase.  It's a step toward better naming consistency.
Fixed a couple of renaming mistakes from the previous commit.
ImageUploadFormHelper refactoring: made files into an array of objects, each with the file object, uploadable status, pointer to its table row, etc.  This eliminated the need for 4 arrays containing status/pointer variables.
Wrote pre-upload and mid-upload summaries, the latter including upload progress (on an 'x out of y files done' level).  The summaries are a bit ugly, but get the job done.
Cleaned up several odds and ends about the image upload page and table layout.

The idea of the outer div to enforce 800px width needs to be cleaned up some more, though.
Fixed a bug where the first file in the list was not checked for uploadability.
Changed the 800-px-confinement div from using inline style to using CSS file style.
Upload-time errors are no longer prefixed with the filename.
The prefix isn't necessary anymore, because errors are now displayed in the files table instead of at the top of the page.
Ajax image upload now uses a single-image form on the server side for validation/processing.  The multi-image form is now only used for providing the multi-file-upload widget for the user.
Filename checking for the upload file preview and the upload itself are now done with the same utility function.
- Changed the filename-error message to be a bit more descriptive.
- Renamed various variables in the image_upload_process function to use underscores instead of camelCase.
Upload preview via Ajax no longer uses Dajaxice; it just uses jQuery's ajax() function now.
- Forgot to add lib/utils.py earlier, so adding it now.  It contains the JsonResponse() function.
Upload preview now checks for duplicates within the same upload.  The way it's presented in the upload table might confuse the user, though, so that needs to be tweaked.