In case that `Constraint` class is not powerful enough to capture what the user wants, then the user can overload `NonlinearProgram` without using `Constraint` class. In 'NonlinearProgramWConstraint', each constraint is evaluated separately. But there can be cases that all the constraints needs some pre-processing before evaluation. For e.g, all the kinematic constraints would benefit by calling `doKinematics` first and then evaluating the constraints with that `kinsol`, rather than calling `doKinematics` within each individual kinematics constraint.