Add requirements based scheduling.

Adds scheduling constraints. See #367 for more details.
done.