We can either overload the  constraints evaluation function, or use the `eval` method `Constraint` objects to evaluate constraints, but not both. So `NonlinearProgramWConstraint` is a special case of the `NonlinearProgram`, it overloads the `nonlinearConstraints` and `objective` methods in the parent class.