Sanity checker core for installation changes.

The idea of this is we can do a sanity check on the registry every time we make a change. If the result isn't sane, we can roll back our transaction.
Check sanity on registry load/save.
Consistency checks now come with a list of what failed.
Log an error if we load a registry that's in an inconsistent state.
Only save the registry in InstallList, not Install

The reason being that Install may be in an inconsistent state when it
tries to save the registry, and then our sanity checks scream and barf.
The registry now includes dlls in its sanity checks.
Merge branch 'bugfix_cmdline' into sanity_checks

* bugfix_cmdline:
  Fix names on `ckan ksp ...` help text.
  Bugfix/CmdLine: Don't try to use KSP before it's initialised.
  NetKAN: Added Karbonite and ORSX.
Implemented Registry.FindReverseDependencies()

This does a recursive, exhaustive search of things which need to be
uninstalled, taking into accounts provides. It includes extensive tests.
Standardised on InstallList and UnInstallList for user operations.

These are transaction aware, act recursively, and save the registry at
the end.

This change breaks the GUI, which I hope to fix in the next commit.
GUI Fixes.

This fixes a bug I introduced earlier where the GUI would crash trying
to look up a relationship that doesn't exist.
Merge pull request #244 from pjf/sanity_checks

Enforced sanity on registry and relational checks.