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.