WIP: Stricter checking on the async downloader.
WIP refactor of ModuleInstaller and NetAsyncDownloader

NOTE: This *doesn't* yet handle user cancellations sensibly.
NOTE: Nothing checks for the DownloadErrorsKraken!
fixed #279 by making sure the modname is not empty. We might need to throw some Krakens from ModuleInstaller when a precondition on an argument is breached.
Merge pull request #298 from christianvdstap/cvds_279

fixed #279 by making sure the modname is not empty. We might need to thr...
Merge pull request #299 from AlexanderDzhoganov/master

Increased NetAsyncDownloader bandwidth sample window to 3 seconds
CmdLine users now get continuous feedback on download progress.

This is a fabulously easy change. Works under Linux, and I expect
works everywhere.

I think we want to officially deprecate the User class at some
point. Callbacks are ending up being a much nicer way to signal
information, and they also aid in testing (as we can ensure
operations call back with the right strings).
Merge remote-tracking branch 'origin/master' into async_refactor

* origin/master:
  Increased NetAsyncDownloader bandwidth sample window to 3 seconds
  fixed #279 by making sure the modname is not empty. We might need to throw some Krakens from ModuleInstaller when a precondition on an argument is breached.
Simplified use of NetAsyncDownloaderDownloadPart
NetAsyncDownloader: Better locking, error throwing.

- Locks are now private
- Fewer NREs on cancellation
- Cancellation throws a CancelledActionKraken
Merge branch 'better_cmdline_downloads' into async_refactor

* better_cmdline_downloads:
  CmdLine users now get continuous feedback on download progress.
GUI now handles CancelledActionKraken.

Also a bit more logging and documentation.
Merge pull request #305 from pjf/async_refactor

Refactoring of NetAsyncDownloader and ModuleInstaller
Removed erroneous documentation.
Merge branch 'async_refactor'

* async_refactor:
  Removed erroneous documentation.
NetKAN: Search more aggressively for .version files.

Previously, we'd only use a `.version` file if it was going to be
installed.

Now, we'll still check the installed files first, but will fall back
to using a lone `.version` file if it's the only one in the archive.

Eases #269.
Added Meta.ReleaseNumber

This gives us just the release, such as `v0.23` or `v1.2.4`.

Includes tests.
Added CkanModule.IsSpecSupported

- Includes tests.
- Altered `JsonSimpleStringConverter` to support all incoming strings.
  (Without this we choke on int -> Version conversion)
Refactor Version to use named captures

- No more magic number groups.
- More obviously correct.
- Already tested by existing version tests. :)
Modules throw an UnsupportedKraken if deserialised with the wrong spec.
Repo: Gracefully handle bad metadata/spec versions.

If we have validation errors with metadata, we just skip that file and
move on. This allows us to read from repos that have metadata intended
for future clients, while still being able to use the metadata for older
clients.

Closes #229.