Make it easier to enumerate over bad links

Instead of having a `each_bad_link` method that accepts a block, we can simply return the collection of bad links and allow the user decide exactly how to enumerate over it, whether that's using `each`, `map` or any other enumeration method.

Also makes some changes to avoid the use of `puts` in the library code which is used elsewhere (e.g. whitehall).