Add cloudformation template
use index instead of range ref
Sort downloaded documents after downloading

These are downloaded out of order so they need to be reordered by their
position in the original array after everything is finished.
Recreate Command object before every invocation
Call by value
Fix page offsetting of nested bookmarks

page offset should be zero-indexed from the parent document, not offset
by one.
Generate full combined bookmark output

This generates the input to `cpdf -add-bookmarks` on the combined
document.
Write bookmarks to combined document
Add logging to net and cpdf operations
Add bookmarks while merging

This gets us to the minimmum number of cpdf commands on the final file
-- turns out you can also AND together the -add-bookmarks operation.
Log all errors after the job is done, not during

This makes a coherent log file much more likely, with errors grouped
next to the notification log message instead of interspersed while the
elements are downloading.
Cleanup tmp files after uploading
Stringify errors before sending them out

error objects don't serialize by default since they have no exported
fields.  So call String() on all of them first before POSTing the
notification.
Send Downloaded document list with metadata

How many documents were downloaded isn't actually stored elsewhere in
the db, so this is important to know for analytics and such.
Remove callback from response

This is redundant information, since this data is *sent* via this
callback, so whatever recieves it can store the URL used if it wants to.
Send timing metadata with response

This is necessary for tracking performance over time on the server.
Track file size of documents when downloading
Abort processing doc if metadata extraction fails

We should not ignore the failure to extract a pagecount or bookmark list
from a document, as it is our best indication that a PDF is malformed.
Instead just add it to the errors list and only attempt to combine
documents that successfully downloaded and validated by not blowing up
cpdf when it tried to extract metadata.
Fix authentication

Didn't previously check for user name (it's awkward because of the http
auth module used) and the check for whether to setup auth was backwards.
Also log failed requests (they were previously ignored).
close settings file after reading it