Choicepoint serialization
Additionally serialize state of the solver during search if the given choicepoint is interesting. That is, when a solution is found, a choicepoint along the search path is considered interesting if the found solution is an improvement to the last solution found along a path involving said choicepoint.
Implementation involves
- TraceWatcher: a class that maintains the best known objective value for each choice point and triggers an event if an improving solution is found
- Changes to the serialization data structures and the solution writer
- Unit tests for new data structures
- Some refactoring to ReversibleObject.h