Load balance splits across nodes

The maximum number of splits running on a node are bounded.
In order to avoid starvation of queries with fewer splits, beyond the
maxSplitsPerNode, every node allows a certain number of splits to be
queued per query. The drawback of this approach is that when the system
is heavily loaded (wrt number of queries), then the number of tasks on
each node will increase linearly with the number of queries and each
node will have at least some splits queued for each query. The drawback
is limited only when the system is heavily loaded and is not
any worse off than the current approach.

Pending: Run the verifier. I will do it after the release today. 
also there is a potential race condition here with taskMap. It looks like taskMap is a concurrent structure, so after checking null, and before getting the node, the item could have been removed? you should probably do the .get() first and save the result to a variable.