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
Oh....yeah...but I'm ok with it until someone comes up with a better solution. If you re-login, some other service might provide a better version than your new credentials (i.e. when switching to a non-resolving account for a resolver that is only used for playlist syncing).