Create and use an ErrorHint type to report how to fix a problem.
Based on @shadykaty's !976 (closed). I think this is ready to merge, but now I've made enough changes that I should probably get additional review.
I've left a TODO in the code about where we might want to make this code even better.
Closes #578 (closed). Closes #579 (closed).