Add extra performance stats

This adds metrics to the performance hash to track the total upload time
and the end-to-end time.

Having the end-to-end time should allow us to implicitly measure how
much time was spent in a throttled state.
Use JSON Content-type for responses
Fmt
Add extra HTTP logging to server
Support test mode

When the TEST_MODE environment variable is set, S3 and cpdf operations
are replaced with a one second delay.
Add fuzzing support to test mode

This allows us to make a percent of the jobs randomly fail so we can
test the failure-handling code elsewhere.
Disable throttling

This is a flawed approach.  Consider what happens when the number of
goroutines exceeds the threshold before this code is reached -- for
example if a large number of connections are made in a short duration.
The workers deadlock and never make any progress.  We need a smarter way
to do this.
Make delay random

An 8 second max delay for operations makes tests pleasingly realistic.
Throttle using job count
Wrap atomic operations in functions
tweak delay
Add queue tracking and status endpoint
Update expectations