Add time check to lease call

This is ugly and hacky and I don't know how to test this.

PROBLEM:
Occasionally the lease task will run right up to it's deadline (within
1/10 sec) and then return an empty list when there ARE tasks in the
queue. This seems to happen when there is a lot of read/write contention
on the queue.

HACKY SOLUTION:
Check the length of the call and we're within that deadline window and
we get an empty list, then raise a TransientError (which also is a sign
of queue contention issues).

POTENTIAL AVENUES OF INVESTIGATION:
See if this problem happens when leasing asynchronously.
Complain to google to throw a DeadLineExceededError (which I've NEVER
seen in this context)
Sit in a corner and cry.
Fix a test and flip a condition
Merge branch 'lease_deadline' into time_check
Change exception to DeadlineExceededError
Add test for time_check
Track the number of insert success and failures on Context.

This adds two new properties to Context which tracks the
number of tasks that were successfully inserted and tasks
that failed to be inserted.
Update context unit tests for insert_tasks changes.
Clarify comment in _handle_tasks.
Use get method when checking REQUEST_ID_HASH.

This will prevent unit tests from blowing up when not set.
Resolves issue #53.
Add unit test to ensure counters are calculated correctly.
First pass at AutoContext

Intended to automatically insert asyncs in batches (asynchronously) as
they are added to the context.
Separate _tasks_inserted set from insertion

Move most of handle_tasks() into _handle_tasks() to allow
AutoContext to insert some tasks before fully exiting.

Also add a parameter to allow different batch_sizes.
Add constant
Add test to ensure AutoContext adds tasks to queue

Also ensure they are added correctly in batches.
Add tests with None batch_size and not tasks

When batch_size is None, AutoContext will act like Context, where all
tasks are inserted at once when the context is exited.

Ensujre that when no tasks are added, there are no errors.
Add comment and remove unused variable and imports
Merge pull request #104 from tylertreat-wf/get_request_id_hash

Use get method when checking REQUEST_ID_HASH.
Merge pull request #103 from tylertreat-wf/insert_counter

Track inserted/not-inserted tasks on Context
Merge pull request #96 from tannermiller-wf/time_check

Time check
Add async task insertion to Async

If you pass async=True into Async.start() then it will use the
asynchronous add method of the Queue instead of the regular one.