Pre forward solve constraint evaluation
As discussed in #2 (closed) we should greedily evaluate all constraint expressions that we can before running a forward solver. This will allow us to avoid running (probably expensive) simulations. Currently we support constraints such as d1 < d2
but they will be evaluated after the simulation run.