UniqueQueue: add an `explicit_unsee` attribute.

In addition to the `silent` mode, add an `explicit_unsee` mode to UniqueQueue.

By default, `explicit_unsee` is False, and tems are unseen as soon as
they are popped from the queue.

The problem is that for certain applications, we want to keep the item
as seen until `task_done()` is called.  Since task_done doesn't take an
argument, we add a new function, `unsee(item)` to facilitate this
behavior.

Unittests updated to verify behavior.
Add some more strict execution controls around file tests

Maybe fixes #83;  replace the Mock we're using to wrap the stat results
with a NonCallableMock.  Explicitly call execute() before stat.  And
verify that stat is returning the proper results.
UniqueQueue should not dequeue work until after execute funishes

As-is, UniqueQueueTask doesn't play nicely with long-running execute
methods since queue.get() removes the object from the unique "seen" set
at dequeue time.  This diff refactors the Queue Task to do the
following:

- Enables `explicit_unsee` mode in UniqueQueueTask's UniqueQueue.
- Moves work completion handling scenarios (success, unhandled error,
and trylater) in QueueTask to separate functions, sharing a common `work_done`.
- Tracks whether the dequeued work was "raw" vs. already having an
ExecuteContext.
- Uses all of the above to appropriately "unsee" the work after execution,
even in the edge case where "TryLater" is thrown on "raw" dequeued work.
Fix captureWarnings build breakage

Copy captureWarnings from Python-2.7, to `sparts.compat`.  Use it if it's
not available in `logging`.

Fixes #84