Merge pull request #172 from pjf/code_health

Code health improvements
FindInstallableFiles throws a BadMetadataKraken instead of returning empty.

This closes #93.

NB @AlexanderDzhoganov, we have another exception to watch for when
installing.
Refacted ModuleInstaller.Install() to use FindInstallableFiles()

Actually, it now uses `InstallModule()`, which does the work.

Notable changes in this:

- Install() can throw exceptions again.
- We move InstallComponent() towards being deprecated
- We cry over still needing bundles.
- Closes #93

Sample output:

```
About to install...

 * DogeCoinFlag 1.03

Continue? [Y/N]

DogeCoinFlag:

Bad metadata detected for module DogeCoinFlag 1.03
No files found in GameData/DogeCoinFlag to install!
```
Migrated RegistryVersionNotSupported to a Kraken.
Registry documentation.
Moved all registry related files into their own directory.

- AvailableModule.cs
- InstalledModule.cs
- RegistryManager.cs
- Registry.cs

No changes except for the rename.
Registry: Documentation tweak, tweaked one if -> else if.
Added Registry.Installed(), which returns all installed mods.

Includes both real mods, and DLLs.
Does not yet return virtual packages
Registry.Installed() now returns provided modules as well.

This also adds a new `ProvidesVersion` class to facilitate this.

Includes tests for ProvidesVersion.
Registry.InstalledVersion now reports provided modules.

New internal Provides() method helps us find these.
Don't register DLLs which are part of an installed mod.

The solution I've got walks through all installed mods every time
we find a DLL, making it O(N^2). That would be terrible, but DLL
scans are so rare, and the number of mods we have is so small, that
I'm considering it perfectly acceptable until someone complains
about the speed.

Chances are we may completely remove support for pre-CKAN DLLs
in the future, anyway.

Closes #141 after the user does a `ckan scan`.
Merge branch '93_install_paths' into 179_file_locking

* 93_install_paths:
  Refacted ModuleInstaller.Install() to use FindInstallableFiles()
  FindInstallableFiles throws a BadMetadataKraken instead of returning empty.
Merge branch '141_dll_trouble' into 179_file_locking

* 141_dll_trouble:
  Don't register DLLs which are part of an installed mod.
  Registry.InstalledVersion now reports provided modules.
  Registry.Installed() now returns provided modules as well.
  Added Registry.Installed(), which returns all installed mods.
  Registry: Documentation tweak, tweaked one if -> else if.
  Moved all registry related files into their own directory.
  Registry documentation.
  Migrated RegistryVersionNotSupported to a Kraken.

Conflicts:
	CKAN/CKAN/Types/Kraken.cs
Wrap many disposable resources in `using` blocks.

Hopefully this will provide some relief to #179.
(I won't say it closes it, but it would be nice if it does!)
Enable VisualStudio style by default

This tweaks `CKAN.sln` so that it uses VisualStudio layout by default.
At some point it lost this and went back to wanting to use tabs and
other oddities.

`CKAN.sln` is black magic to me. I'd love to find another way for
MonoDevelop to determine text formatting settings.
Add .ackrc file for better searching.

This adds an `.ackrc` file, for use with ack ( http://beyondgrep.com/ ),
a rather awesome text/code searching tool. For people who aren't using
ack, it won't do anything or cause any harm. :)
Merge pull request #180 from pjf/179_file_locking

Wrap many disposable resources in `using` blocks.
Merge pull request #182 from pjf/settings

Updated settings for easier coding
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. :)