compare s3's last modified time using server's timezone

S3's last modified time is stored in utc timezone,
but displayed in server's timezone.
Prior to this fix, no timezone calculation was made,
so test_ls_command.py kept failing for some timezones.

This fix tests displayed last modified time using server's timezone.
Fix hanging Ctrl+C on S3 downloads

This is a regression that was introduced when the IO queue/thread
was introduced (https://github.com/aws/aws-cli/issues/619).

The current shutdown order of the threads is:

1. Queue end sentinel for IO thread.
2. Queue end sentinel for result thread.
3. Queue end sentinel for worker threads.
4. .join() threads in this order:
   [io_thread, result_thread [, worker threads]]

Though the actual thread shutdown order is non-deterministic,
it's fairly common that the threads shutdown in roughly the above
order.  This means that the IO thread will generally shutdown before
all the worker threads have shutdown.

However, the download tasks can still be enqueueing writes to the
IO queue.  If the IO thread shutsdown there's nothing consuming
writes on the other end of the queue.  Given that the queue is
bounded in maxsize, .put() calls to the queue will block until space
becomes available.  This will never happen if the IO queue is already
shutdown.

The fix here is to ensure that the IO thread is always the last thing
to shutdown.  This means any remaining IO requests will be executed
before the IO thread shutsdown.  This will prevent deadlock.

Added unit tests demonstrates this issue.  I've also added an
integration test that actually sends a SIGINT to the process
and verifies it exits in a timely manner so can ensure we
don't regress on this again.

Note: some unit/integ tests needed updating because they were
using .call() multiple times.

Fixes #650
Fixes #657
Use only QUEUE_END_SENTINEL for triggering shutdowns
Fix failing unittests

Fallout from removal of .done and .interrupt.
Fix race condition in CreateLocalFileTask

It's possible that between the isdir() check and
the makedirs() check that another thread has come along
and created the directory.

We also need to make sure that any uncaught exception will
cause the download to be cancelled.
Add changlog entry for deadlock bug
Merge branch 's3-hang' into develop

* s3-hang:
  Add changlog entry for deadlock bug
  Fix race condition in CreateLocalFileTask
  Fix failing unittests
  Use only QUEUE_END_SENTINEL for triggering shutdowns
  Fix hanging Ctrl+C on S3 downloads
Add ability to immediately shutdown executor

Switch the task queue to a priority queue and allow
ShutdownThreadRequest (which originally were just the QUEUE_END_SENTINEL
object) to have a more important priority in the case that a user
has hit Ctrl+C.
Add stable priority queue for task queue

This is needed to provided FIFO semantics to the task queue
for objects of the same priority.

We only need to be able to preempt workers with high priority
items.  Otherwise everything should be in FIFO order.
Remove dateutil as a dep, not needed

botocore pulls in a dep on dateutil.
Merge branch 'quiver-fix-s3-lastmodified-tz-oddity' into develop

* quiver-fix-s3-lastmodified-tz-oddity:
  Remove dateutil as a dep, not needed
  compare s3's last modified time using server's timezone
Merge branch 'immediate-s3-exit' into develop

* immediate-s3-exit:
  Add stable priority queue for task queue
  Add ability to immediately shutdown executor
Don't remove paging params from arg table, hide them

This allows us to add pagination configs after the fact and
still remain backwards compatible with users performing their own
pagination.

The new logic is to support the manual, per-service pagination
arguments, but not document them.  If we see that the user has provided
manual pagination arguments, we automatically switch `--no-paginate`
on.

This keeps pagination backwards compatible.  If a user was manually
paginating responses:

    aws service op --next-marker foo

And we add pagination configs to the service, then the previous command
will still work because we'll detect the --next-marker argument
corresponds to a pagination arg, we'll instruct the CLI to not auto
paginate, and the user will have the same behavior.
Merge branch 'hide-page-params' into develop

* hide-page-params:
  Don't remove paging params from arg table, hide them
Don't run Ctrl+C test on windows

SIGINT not supported.
Initial commit of datapipeline port

This commit:

* Takes datapipeline out of "preview" status
* Ports their existing CLI commands over to the new CLI

There's really two main additions from the baseline of 1-1 mapping
CLI commands to JSON model operations:

1. Support the pipeline definition format.  This is a more succinct
   version of how the data is sent in the actual API call, and is
   used for both input/output
   (put-pipeline-definition/get-pipeline-definition).
2. Add a "list-runs" command.  This is a high level command that
   combines several API operations into a single command.
Merge branch 'datapipeline-port' into release-1.3.0

* datapipeline-port:
  Initial commit of datapipeline port
Fix autocomplete test
Bumping version to 1.3.0
Merge branch 'release-1.3.0' into develop

* release-1.3.0:
  Bumping version to 1.3.0
  Fix autocomplete test
  Initial commit of datapipeline port