Add basic authentication authentication for plugin manager

The plugin downloader which is invoked by the plugin command line does not support downloading the plugin from a URL which is secured using basic auth.

Use Case
-------

In the continuous integration process if we want to install a plugin where the plugin artifact is available on the CI server which is restricted with basic auth this is not possible.

Workaround
----------

Download using wget passing auth details and use the elasticsearch plugin command line passing the *file* url instead of *http* url

Good to have
-----------

Plugin command line to have options to take in basic auth credentials and pass it on to the downloader.

Thanks to @katta for the original PR!

Closes #2550.
Any reason this is written as an `abstract class`, but defined exactly like an `interface`?