[MRG] Automatically group short tasks in batches

This is based on an online evaluation of the batch completion time to dynamically tune the size of the batch of tasks to dispatch at once to a worker.

TODO:

- [x] ensure tests pass on windows
- [x] update the change log
- [X] test with scikit-learn
We do now do the dispatch and iteration consumption under a unique lock in `dispatch_one_batch`. The dispatch code is therefore simpler and thread safe by default. No need to protect the iterator itself. It adds overhead for no benefit.