Package.__str__: show slot/sub-slot
format_unmatched_atom: Pretty printing for unmatched atoms

This is a split out from the slot conflict handler to be
used in other places.
Some small output fixes for the slot conflict handler

* unmatched atom printing now uses ^^ markers
* unmatched atom printing properly supports sub-slots
* Fix spurious "no parents" message caused by AtomArg parents
Add digraph.discard
Solve some slot conflicts without backtracking