Partial working implementation of the CSV import feature.

image_upload.html: this is the template that houses the CSV form
uploadForm.css: just added a couple of classes for error msgs
ImageUploadFormHelper.js: Added front-end logic to power ajax views, where
a csv file is read in and processed for later use, with appropriate error checking
forms.py: added CSVImportForm
urls.py: added ajax view url pattern
utils.py: created function that parses CSV file into a dictionary storing metadata vals
views.py: ajax view implemented here that essentially calls that function in utils.py

Next, the metadata needs to be read properly when the upload process begins, as
well as for the pop-up to appear before upload time starts.
Fully working CSV upload function.

Added some code in views/py to handle shelved csv_dict from earlier, that saves to the database. Added a little front end tweaks.

Last thing that needs to be done is to display a pop-up before upload time, for confirmation.
Partially working pop-up before upload implementation. Added jquery-ui dialog boxes.

The pop up is displayed before the user uploads a file, only when using
csv files. All that needs to be done is for the metadata to be properly displayed
in a table format within the pop-up.
Completed content of upload pop-up, including styling.
This will display a pop-up every time the user tries to add CSV metadata, and attempts to upload.

Added another ajax view to handle error checking of uploaded files.

Also added dynamic table generation in order to display metadata in a table.
Slight cleanup in the upload code: uploaded_images is not used anymore, and added a couple of comments.
Upload: the specify-metadata field now has help text in a separate dialog.
Upload: removing some commented out code.
Made images' photo_date field optional (can be null).  This was done on the database side too, because there is no good 'empty string' equivalent for date fields, unlike char fields.
Uploading images without location values no longer causes server errors.  Prev and next links have been simplified greatly, and now only look at the image id, not the date or location values.
The metadata (grid) form no longer requires the date field.
Upload: the upload annotations/points option isn't available if you specify image metadata only after upload.
Upload: 1. Skip/replace duplicates option removed.  2. Now duplicates are detected by looking at (a) the filename, or (b) the original filename as specified in a metadata-formatted filename.  3. Duplicates only give warnings instead of preventing upload / forcing replacement of old images.  Next: fix a logic error where duplicates are only checked for when the metadata method is from filenames (dupe detection should now work regardless of metadata method).
Upload: fixed a logic error where duplicates were only checked for when the metadata method was from filenames.  Duplicates are now checked regardless of metadata method.
Upload: once the upload is finished, the user can then click a button to either (1) start another upload, or (2) proceed to the metadata grid page with the just-uploaded images as the grid rows.
Browse: lots of overhauling of code to make it work well with two ways to specify images - search args, or a list of image ids.  Also random minor improvements, like better presentation of the batch-action form.  Very much a work in progress; delete images, patch mode, and coming from upload need to be fleshed out.
Browse: image-status searching fixed. Upload: working on fixing the upload->browse transition, again.
Upload: did a decent bit of restyling.  Also, all help text on this page now uses modal windows.
Upload: more restyling, particularly in the help text.  Also, a couple of changes to Jeff's code in upload/utils.py that seem to be necessary to make CSV work for me.  Not yet sure why it worked for him and not for me.
Upload: couple of minor things. (1) removed the CSRF token from the "upload more images" GET form, since it wasn't necessary and took up space in the resulting URL. (2) added a help text clarification about the CSV metadata preview.
Upload: (1) changed a couple of error message constant names. (2) now using json instead of the obsolete simplejson in the JsonResponse utils function. (3) still attempting to figure out how to make annotation file and CSV file support be tolerant of various character encodings, but not much luck so far.