Refactor script/js bindings, link generation and everything

In a resolver init method you can do now:
```javascript 
var MyLinkGeneratorPlugin = {
    generateQueryLink: function(query) {
        return Promise.resolve({"url":"yeeeehaaa"});
    }
};

Tomahawk.PluginManager.registerPlugin("linkGenerator", MyLinkGeneratorPlugin);
```

You can reuse the same object for several plugin instances. Currently ScriptPlugin in C++ is the core plugin which contains the actual binding part, in JS it's the particular instance ... will need to rename things a bit here.
Needs conversion to std::list first. I'm not sure of the implications of for : and foreach, so I'll stick to what I know until you show me why I shouldn't do.