Scheduler for the solver
Right now the constraints are selected in an arbitrary order, the selectors are applied in the order in which they were declared, and the same goes for the propagators. We should have a scheduling module which picks the order in which the work queue is handled. If the scheduler is actually based on user input, this gives us a way to guide the type checker when trying to understand why a type error occurs.