[wip] open up the possibility to generate rulesets dynamically

This will allow us to do something like:

```javascript
var locator = new Locator({
    rulesetFn: function (bundle) {
        if (bundle.pkg && bundle.pkg['jsnext:main']) {
            return { /* create synthetic rules for ES6 packages */ };
        }
    }
});
```

tl;dr: we can read package.json for a package, and generate rules the way we want it based on the package information without having to have a designated ruleset.
Hmmm... the `cacheKey` is basically `((bundle.options && bundle.options.ruleset) || DEFAULT_RULESET) . '@' . bundle.baseDirectory`, which when `rulesetFn` (and no `ruleset`) means `DEFAULT_RULESET . '@' . bundle.baseDirectory` which might be a little confusing (but probably not an issue).