Various optimizations

- Optimized Version.StringComp and Version.NumComp
Profiling done by measuring GUI start-up time. The numbers represent the percentage of inclusive samples for the whole run of the program.
![profiling results](http://i.imgur.com/SAUoMLD.png)

- Also adds tests for both functions
- Some GUI optimizations
- KSPVersion caches its Version object
- Optimized the GUI mod name filter

Final results are that the GUI should start in 2-3 seconds instead of 20 :)
One gotcha is that as our version transitions from a short version ("0.23") to a long one ("0.23.0") our cached object may not be updated.

That's fine if this is a private method, because we can make sure we're only ever called with long-versions, which don't mutate back to short versions. If this is a public method, we can hit troubles by someone making a short object, calling this method, and then calling `.ToLongWhatever`, causing them to de-sync.

- [ ] Make VersionObject a private method.