Add timeout while downloading from S3
Try another error approach

This is more idiomatic as it relies less on panic().

One outstanding problem is that errors don't bubble back to the
getAllFiles() method which is left waiting until the timeout is done
to execute the callback.  Need an error channel
Use a separate error channel to detect errors

Now errors just get passed out and handled by the spawning process.
This also simplifies error handling, since the select{} is also a
synchronization mechanism that prevents multiple goroutines from
clobbering the struct's .Errors field.
Only combine if no errors
Maintain a separate list of downloaded docs

This is so cpdf can still process our list even if some of the docs
failed to download properly.
Don't export unnecessary fns
Exported methods go at the top
Split Job into its own package

This way the combiner package handles coordination and synchronization,
and the Job class is more of a bucket of state -- although it still
interfaces directly with S3.  separation of concerns is a bit muddy --
combiner knows way too much about the Job type...
Make AddError() smarter

If you specify a bad bucketname the aws library gives an obscure error
which needs to be made more clear
Use completed docs to determine speed, not total
Documentation
Remove unneeded variables
Documentation
Doc and remove extra variable
typo
Buffer channels to prevent deadlock

The goroutines could in theory very quickly try to send on these
channels before the reciever has started listening on them, which would
fail.  Buffering the channels allows them to accept values even if the
reciever isn't listening yet.
Throttle concurrency

Before this commit, work on a job would always start as soon as it was
accepted, regardless of whether the system was overloaded.  This
prevents too many threads from being active at one time -- new work will
still be accepted immediately but the execution will block until the
load is reasonable.
Specify chan types

One of these methods only sends on the channels and the other only
recieves.  Might as well put that in the signature...