Refactor mod list

Includes #495 but has been rebased onto master. 
Alas, while our other functions currently call `KSPManager.CurrentInstance.Version()`, it is my sincere hope that in the future they will not. This is essentially a global variable, and it's brought with it all the suffering that is their domain. In this case, it makes our registry class harder to test, and adds another dependency it should not have. As such, I would love for the `KSPVersion` parameter to be mandatory here, not optional.