S3 publishing

In order for the publishing to work the following variables have to be
set

S3_BUCKET_NAME
S3_SECRET_ACCESS_KEY
S3_ACCESS_KEY_ID
inside the .travis.yml. I am unable to set this at the moment, so this
is something that should be kept in mind during merge.
[Fixes #107] ensure we can cancel GUID_KEY based “once” methods
move cancel test to the cancel test file.
Merge pull request #110 from stefanpenner/fix-cancel

[Fixes #107] WIP
Allow `target` and `targetQueue` to be undefined.
Merge pull request #114 from rwjblue/handle-target-queue

Allow `targetQueue` to be undefined.
Merge pull request #109 from rondale-sc/s3_publishing

S3 publishing
[Perf inspired by#71] reduce needless work when flushing and encountering empty queues

* don’t both allocating a new intermediate queue if it is empty
* don’t bother trying to invoke all the callbacks for a clearly empty queue
* don’t both trying to flush the empty queue
* don’t bother trying to see if the empty queue scheduled something on a previous queue

instead

- check if we need to flush the current queue
 - if it needs to be flushed: flush, then return to the first queue and check again.
 - if not, try the next queue
[fixes #106] unify deferredActionQueue.flush and queue.flush

I am sick of maintaining both, they are so close to the same thing. Also, now the queue.flush no longer deopts in v8 do the the try/catch.
Merge pull request #115 from stefanpenner/skip-queue

[Perf inspired by#71] don’t attempt to flush empty queue, merely skip to...
Merge pull request #116 from stefanpenner/unify-sync-and-deferred-flush

Unify sync and deferred flush
[fixes #117] queue.flush(true) aka run.sync() also flushes jobs that where queued in the previous flush, where the previous flush itself was a previous flush (such recursion)
remove unused test var
Update dependencies