Add requirements based scheduling.

Look at the changes to predicates.  This is so that we can do constraint/requirements based scheduling.