don't create lists

This is crazy, and makes getting all partitions of a sequence an n^2 operation
notice nesting of `sync_results` decorator

ensures the sync operation only fires once, after the outermost call.

avoids O(n) calls to set.difference
check whether all engines are at HWM in a few places

avoids calling maybe_run on the entire queue when we know that no tasks can be run.
This caused an expensive O(N) operation every time an engine just became not-full,
which is every time a task finishes in the default case of HWM=1.
use heap-sorted queue

avoids having to sort the queue when updating the graph

also renamed `depending` to `queue_map`, to better describe its role.
add debug log when a task is added to the queue
use per-timeout callback, rather than audit for timeouts
use deque instead of heapq
remove accidental debug statement
Merge pull request #3108 from minrk/fastmap

fix some O(N) and O(N^2) operations in parallel.map

some left over code from (presumably) when the map partitioning objects
were stateful made the current implemenation O(N^2),
thus crazy slow for much more than a thousand tasks.

A decorator has also been fixed to avoid calling itself more than once in a given context.

An O(N) operation when `TaskScheduler.hwm != 0` has also been fixed.

Illustration of performance differences:

http://nbviewer.ipython.org/5267262

closes #3106