Fix #6661. Configurable multiple linters.

Something I started at the hackathon and finished offline.

This PR fixes #6661. It introduces an option to control execution of linters through a configuration file. It uses `LanguageLayer` implemented in #7889 (#7889 should be merged first). No UI impact.

For any given language `languageID`, the following set of options can be defined:

```
"language": {
    "languageID": {
        "linting.prefer": (comma-separated-list-of-linters),
        "linting.preferredOnly": (boolean),
        "linting.firstOnly": (boolean)
    }
}
```
`linting.prefer` is the list of code inspection providers (does not matter whether they are installed or not). if `preferredOnly` is specified, then only providers from `prefer` list will be used (those which are installed, of course). `preferredOnly` will have no effect if `prefer` is not specified. if `firstOnly` is specified, then with the first installed preferred provider will be used. if `prefer` is not specified, then the first registered provider will be used. Test cases are provided which are probably the best documentation.

For example, the following configuration is used in this PR for Brackets:
```
"language": {
    "javascript": {
        "linting.prefer": "JSLint, JSHint",
        "linting.preferredOnly": true,
        "linting.firstOnly": false
    }
}
```
Which would enable both `JSLint` and `JSHint` (they will be used in that order).

- [x] remove JSLint override on a JS provider registration
- [x] merge when Async linting lands in master
- [x] change brackets' own .brackets.json to always prefer JSLint

See #6661, #6662 

CC: @dangoor, @peterflynn, @ingorichter 
Scratch that again, forgot how it worked. :) Glad I wrote enough tests for it. @Mark-Simulacrum, it actually does not only filter, but rearranges the array, hence `reduce`. Will address your readability comments though, thanks.