Started rewrite of request.py.
Fixed a potential deadlock that could occur if a callback blocks for another request.
Also, improved comments and function naming.
request rewrite: Fixed bugs:
- Workers might not be notified of new work.
- Calling wait() always suspended the current request, even if it wasn't necessary because the waited request was already finished.
request_rewrite: Fixed a bug that could cause a worker not to be notified when it is stopped or has new work.
Added cancel flag and function, but it isn't used yet.
Cancellation works.  Cancelled requests are notified via an exception.
Added a unit tests for the (rewritten) request system.
Added a test to make sure you can fire (and wait for) new requests from within a request callback handler.
Fixed a bug in cancellations.  Improved cancel unit test.
- Use a lock when initializing cancelled flag during __init__
- Added support for original request api
- Improved some docstrings.
- Minor modifications to graph.py and OpArrayCache for compatibiltity with both old and new request back-ends.
- Old and new request back-ends are now in a request package that selects which back-end to use.
Improved cancel unit testing.
Fixed a problem with spawning child requests during cancellation.
Improved cancel test suite.
graph.py is now compatible with both old and new request apis (and cancellation schemes).
Use sets for callbacks instead of lists.
Append and pop from opposite ends of the job queues.
Auto-submit requests upon construction.
Fixed a comment.
Converted request lock from RLock to Lock for performance reasons.