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.

TODOS:
- [ ] Port ScriptCollections
    - [ ] Make sure results point to the right collection
- [ ] Add registerCallback functionality
Not your code, but maybe you can fix this: never initialise an empty QString with "" as this uses up heap space, QString() in contrast does not use any space on the heap