Merge remote-tracking branch 'pjf/code_healthh/code_health'
Fixed all the compiler warnings :
Fix RelationshipResolver to examine provides as well.

At its guts, this is just a call to `LatestAvailableWithProvides()`,
but this commit also includes:

- Documentation updates
- `LatestAvailableWithProvides()` will list providers even if a real
  module has that name.
- A fancy `TooManyModsProvideKraken()`, which is the prettiest kraken
  you'll ever see in a stack trace. ;)

I've also adjusted `Main.GetInstallDependencies` to catch the
`TooManyModsProvideKraken` This doesn't ask which provider they wish to
use, but I'm delighted to see the GUI's "apply changes" box is greyed
out until they have a workable install set.  (So one can choose RSS, and
then tick RSSTextures2048 afterwards, and get a green install button!)

In other words we have behaviour that's at least as good as what we had
before. :)

Closes #175.
Added Cache.CachePath(CkanModule), for easy module saving!

Includes test. :)
ModuleInstaller: Use supplied KSP, not CurrentInstance

Important for testing, encapsulation, and to get away from
CurrentIntance which is practically a global variable now.
Replace file transactions with ChinhDo.Transactions.

Closes #185 (no download bug)
Closes #181 (replace our transactions)

We have a lot fewer transactions than I expected, but this seems
to fix the no-download bug in #185.
TxFileManager transactions for EVERYBODY!

- Everywhere I could find that does IO now does it through a transaction
  if possible. Most notably, the registry uses transactions.
- InstallList(), Install(), and Remove() all use transactions.
- CmdLine's Upgrade() is now a transaction around Install and Remove.
- Hand tested. OMG. It put back a botched upgrade as it was, including
  the registry.

Closes #181.
Bonus commit! Fix and re-enable sha1_sum.
Netkan: Check we'd actually install files when generating metadata.

Tested with live NetKAN data, and it works. ;)
Merge pull request #187 from pjf/185_no_downloads

Transactions for EVERYONE!
Merge pull request #184 from pjf/175_relationship_resolver

Fix RelationshipResolver to examine provides as well.
Merge pull request #189 from pjf/better_netkan

Netkan: Check we'd actually install files when generating metadata.
Renamed KerbalStuff / ks2ckan -> NetKAN
Renamed CKAN.KerbalStuff -> CKAN.NetKAN
Bonus commit: .ackrc only likes simple directory names.

Not nested ones. It works better now. :)
The all new and amazing NetKAN!

We can now inflate files with `netkan SomeMod.ckan`. Provided it
contains a `$kref` path we recognise, we'll fill in the metadata,
validate it, and write it out (`SomeMod-1.23.ckan`).

We support both KerbalStuff IDs, and Github repos:

- `"$kref" : "#/ckan/kerbalstuff/269"`
- `"$kref" : "#/ckan/github/pjf/DogeCoinFlag"`

Other changes include:

- BootKAN -> NetKAN (directory rename)
- NetKAN.json no longer needed
- bin/netkan-all regenerates the entire index.
- Nicer command-line options.

Closes #151 like a boss.
Merge pull request #191 from pjf/151_better_netkan

The all new and amazing NetKAN!
`netkan` no longer requires a KSP install to operate.

For a cache, we now use the following:

- What the user specifies, via `--cachedir=...`
- The local CKAN cache, if we can find it.
- The tempdir for the machine.

This means that the `netkan` utility can be used on machines without KSP or the CKAN client installed.

Closes #190.
Updated spec and NetKAN/README as well.
Added USITools to the NetKAN.