This PR introduces the following changes already added to max-utilization branch:
Adding a bounds property to indicators (and objectives) to make the solver stop when it reaches its bound (upper if maximizing or lower if minimizing) since this would be the best possible value.
Making add_objective methods return indicators so they can be later used in the problem, for instance, in the form of constraints.
This PR introduces the following changes already added to max-utilization branch: