Expose Solver.Model for Diagnostics

This allows the solver to work with abstract roles rather than
interfaces. One visible effect of this is that the diagnostics now
put "#source" after interfaces being used to select source code.

Adds diagnostic for implementations that weren't selected because they
depend on a missing command in the same implementation.

TODO:
* Solver interface could be more abstract