I'm thinking about making this a specific exception type, so berks will know to run the `find_unsatisfiable_demands` method. In the case of `InvalidSolutionConstraints` and `NoSolutionExists`, dep-selector was able to both determine that the problem did not have a solution and also offer debugging information about what artifacts/constraints are the likely cause. In the case of `TimeBoundExceeded`, dep-selector didn't determine if there's a solution before timing out. `TimeBoundExceededNoSolution` is the odd case, because dep-selector did determine that there was no solution but it could not find the precise cause. This is the case that `find_unsatisfiable_demands` was created to handle, where it falls back to a coarse-grained way of finding invalid demands so that at least a little actionable info can be presented to the user.

Something like `class NoSolutionErrorCauseUnknown < NoSolutionError; end;` seem reasonable?