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.
No longer query the user during transactions.

UninstallList used to quiz the user while inside a transaction. We don't
do that anymore.

The User.YesNo function has been altered to give us a warning if it
detects a transaction in progress, so we can spot this if we ever do it
in the future.

Fixes #334.
Cmdline: Fix typo: "Manage KSP insatlls".

Fixes #232
NetAsyncDownloader: Throw MissingCertificateKraken on missing certs.

This means our users get much more useful feedback when they can easily
fix their problem using mozroots.

Fixes #219.