refactor: convert "link tuple" to FoundVersion class
update pip list
flake8
_link_sort_key becomes FoundVersion.sort_key
added InstalledFinder

had to split out Link and FoundVersion to avoid cyclic imports