Use exact position of dependencies when reporting errors
Revamp the way checking steps are run

Instead of a huge ugly function, create a make-like dependency tree,
whereby dependent steps can either succeed and return info, or fail.
Along the way, the steps can register warnings or errors freely.