doc
Add representation of pdf bookmarks
simplify Get()
comments
Move s3Path to Document
doc
Move exported functions to top of file
extract AWS attributes to variables
Interfaces for cpdf

This updates cpdf to conform to two interfaces, which decouples calling
code somewhat from the cpdf implementation, and potentially makes it
easier to replace cpdf with an open source pdf handling backend.

Combine files and add header in a single pass

Split Cpdf into two interfaces
Handle bookmarks

Add the ability to read and parse document bookmarks, and generate text
in the format cpdf needs to reconstruct the individual bookmark trees
into a single combined tree.
Give Documents a pointer to their parent Job

We have a need for documents to know about shared things like what tmp
directory is being used to process the job.  This can be stored in the
Job, but until now, documents had no knowledge of the job they are
contained in.
Remove old TODO
Use Documents instead of strings representing them

This fixes up some debt related to the fact that when combiner was
originally written there was no object to represent a document.  Now
there is, so we should be passing them around instead of strings.  Also,
get rid of the Stat type and move its functionality (representing
document metadata) to Document itself.  In the mean time, eliminate some
timing and logging code for cleanliness, possibly to be added back later
if necessary.
Jobs remember their working directory

This information used to be stored in various places throughout
combiner, but it makes more sense for it to be a field on the Job.
Among other things, it allows Documents to know how to generate their
own paths.  This lets us change cpdf.Merge() so that it can operate
directly on a job.
Test the job counters for concurrency