Code now uses the API and the new json structure

JSON data is downloaded from our API rather than a static file on
Github.

The code is now based on the new json structure which stores the plugins
as a dictionary (with module_name as key.)
Conform to the updated API

...which has a versioned URL and outputs plugins correctly.
Added download and install capability

The plugin is downloaded from the /download endpoint of the API which
increases the download count and serves the plugin zip files.

The zip is downloaded and extracted to USER_PLUGIN_DOWNLOAD_DIR.

The extracted plugin is then installed (loaded, but not enabled.)
Loading the plugin moves it to USER_PLUGIN_DIR.

The zip is then deleted but the extracted folder contents are kept,
I don't have any specific reason to keep the extracted folder so, this
can be deleted too...

TODO:

    If the plugin couldn't be downloaded (network error or w/e) a dialog
    box is shown, but If it was downloaded and installed, the user does
    not get any notification.

    Add a checkbox "Hide alread installed plugins." - which can be used
    to view plugins that are available but not installed.