Refactor mod list

Includes #495 but has been rebased onto master. 
> Given that four existing functions in Registry.cs with the same optional parameter my initial thoughts would be would to inject it in the constructor.

Alas, these have two different meanings. Two of those go and look up the global variable, whereas the other two a null KSP version means checking if a mod is available for *any* KSP version (ie, does it exist at all). Supplying the KSP version to the registry at construction time perfectly reasonable, although I'd love such changes to be on a separate PR if we do them.

Making this a mandatory parameter means the GUI *is* going to look up exactly same thing, but it's already doing that liberally. Outside of `KSPManager` itself, `ckan.dll` only uses the variable in four different locations across the *entire* codebase, and I hope for those four to be eliminated. At that point the variable becomes a convenience for clients (such as the GUI) that may wish to use it, but will no longer cause the suffering for test cases and coupling that it has in the past.