New add-image page [#5]

Note: in order to style the file input, there's a funny hack in place.
The file input sits in front of a button (actually a <label>), but has
opacity 0; its width and position need to be aligned just right with the
"select" button.

The nav-tabs' border rule needs extra specificity to override
bootstrap's defaults, presumably because CSS was designed by malevolent
spirits.

When the controller receives a file, it calculates a filename and tells
the page JS about it. From that point on, that has to be the filename;
recalculating it after reorienting isn't ok. So the filename is now
frozen on ImageTruck initialization.
Don't use post in the auth tests

At the time they were written, you could GET /add without auth. Using
POST /add coupled the auth tests to the internals of the add logic,
though, so now that GET /add requires auth, we can decouple it!
Extract some repeated code in ImageTruck
Fixes for edge-cases on async uploading [#5]

* if an image is smaller than 100x100, it won't have a thumbnail
    version, so try checking for the original. This, of course, means
    the original needs to be uploaded *after* the resizes.
* Upload thumbnails first out of all the resizes, so the JS can get at
    them ASAP.
Format error responses according to the request [#5]

This allows abort()ing with a json response that ajax controls can read.
Make a new image-add pane after each upload [#5]

The change from .change to .on('change') makes the handler apply to new
elements once they're added.
Keep all the test-image filenames in one place

This just reduces duplicated strings...
Tests & fixes for the new-image page [#5]

Hey I think making my markup more test-framework-friendly also made it
more accessible! :)
Functional image-attribute controls in new-image [#5]
Set an album when adding new images [#5]
Create albums on the add-image page [#5]
Don't queue tasks until after committing [#5]

This prevents a subtle race condition where a delayed task starts before
the after_request commit happens, and then fails to find the stuff it
needs in the database.
Upload multiple files at once [#5]

Multiple file uploads do't seem to get useful MIME data, so the
controller can't provide a filetype to new_from_stream any more.

Selenium doesn't seem to support attaching multiple files at once, so
that JS isn't tested. Bogus!

The "file[]" input name seems to be a convention for multiple files,
used by various frameworks including Flask. Note that it messes up
jquery's name selectors since jquery tries to parse the square brackets.