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
To reresolve tracks when you relogin. 

It's ugly, but I could not figure out a better way until we can dynamically add and remove resolvers (when we have script accounts)