Dynamic requirements

This is a prototype for dynamic requirement based of [erikbern's dynamic-requires branch](https://github.com/spotify/luigi/pull/255)

It differs in that it multiple requirements can be returned at once and that it supports multiple threads. There is no concept of suspending tasks. If the requirements are not all available when yielded the task will be put back as pending.

I struggled with getting access to the dynamic requirements from other processes. How it works now is that you have to add a dynamic_requires function that return the Tasks that may be yielded later on. I'm very open to suggestions on how to improve this.

Again, just a prototype... Comments please!



given the line above (`if task.status not in (PENDING, SUSPENDED`) it doesn't seem like this is needed?