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!
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