Privatise the internals of Registry.

- Better assurances other classes can't mess with our registry.
- Discovered `registry_version` wasn't used at all.
Privatise InstalledModule and InstalledModuleFile fields.

This was a surprising amount of work. It doesn't even fix
the bug I'm trying to hunt down, but it gets us closer.
Newly installed mods now record relative paths in registry.

However we still need the complete file-list in the registry
to do this, *and* we need for remove to be able to understand
relative paths.
Added KSPPathUtils.ToRelative

- Includes tests.
Added KSPPathUtils.ToAbsolute
Commented on some things we should do in the registry.

No code changes, comments only.
Added `ToRelative` and `ToAbsolute` to KSP.

Includes tests.
Registry now always stores files in relative format.

Fixes #177
RegisterDll now works properly using relative paths.

Needed for #177.

Also, it sucks less now. :)
Registry.DeregisterModule now works with new relative/absolute paths.

Also much more sensible. If any files are still instlled from this mod,
we throw an exception.
Automatically detect older registry versions and upgrade.

This will also let us more cleanly handle registry upgrades in the
future, too.

This should end the relative path work for #177.
InstalledModule has regions, tidyup, fewer warnings.

No actual code changs here, but we:

- Disable a warning on a field we're recording now, but using in the
  future.
- Added regions, for easier navigation.
- Made our properties less spread-out.
Fixup ModuleInstaller to use preferred path functions.
ModuleInstaller.UninstallList now throws a ModNotInstalledKraken

Also, writing kraken documentation is the best. ;)

Part of #313.
`ckan remove`: better message if the mod wasn't there to start with.
cmdline: Better messages when upgrading not-installed mods.

Closes #313.
Disable experimental features iff we're on a stable branch.

Current experimental features are:

- The GUI
- The `upgrade` command.

This also gives us the version number on the help screen, and flips a
previous custom exception to a kraken.
RelationshipResolver now checks sanity before installing.

This was a surprisingly easy change, and it results in a really cool
list telling the user why what they've asked for isn't possible.

This also gives the Registry some nicer interfaces, eliminates duplicate
lines in our sanity checkout output, and expands the things the
InconsistentKraken can work with.

Fixes #332.
Missing modules are now info, not warning level.

This isn't something the end user can really do anything about, so we
shouldn't be warning them.
RelationshipResolver no longer suggests conflicting mods

If something would conflict with a mod we already have installed, or are
about to install, we remove it from consideration. While the previous
commit in this sequence ensures we never try to install conflicting
mods, this change ensures we provide a *shorter list* of
inconsistencies, so the user isn't scratching their head quite so much
wondering why a whole slew of things were going to be installed when
they conflict.

Fixes #332.