Add `:multi_os` feature for expanding on `:os` key

The feature will be defined on the repository level.
The actual queuing of the job needs to still happen.
Add preliminary multi-os support

Job's `:os` parameter is now configured and used for queue selection.
Queue selection logic needs to be fixed; it currently relies heavily
on the order in which the queues appear in `Travis.config`.
Do not remove :os if multi-os feature is enabled

This should let travis-web display the 'os' value in the matrix
Merge branch 'master' into ha-feature-multi_os_support
Extract config key deletion to a method

Avoid the cryptic `delete_if`
Do not go through `request` to get Repository
Change local var name to a noun
Remove trailing spaces [skip ci]
Tweak Queue specs

* Simplify `language` assignment in `Job::Queue.for`
* Align Mac queue's name to reflect the value in production use
Move call to `remove_superfluous_config_keys`

Move `remove_superfluous_config_keys` from `#keys` to `#expand`,
where it logically belongs.
Clean up `#remove_superfluous_config_keys`

No need to pass `exceptions`, since `:os` will appear in `#keys` if
the multi-os feature is active for the repo.
Invoke `Travis::Features.active?` only when necessary

Do not inquire Redis if we don't have to.
Merge branch 'master' into ha-feature-multi_os_support
Merge branch 'master' into ha-feature-multi_os_support
Merge branch 'master' into ha-feature-multi_os_support
Fix indentation [skip ci]
Specify language in spec data
Use own copy of config hash in Build::Matrix::Config

Instead of reaching in directly into the Build object's @config,
Build::Matrix::Config should have its own copy of config, so that
we don't step on Build's foot if it expects the data to be untouched.
Tweak remove_superfluous_config_keys

No need to dup here, since `@config` is a dup created in `#initialize`.
Merge branch 'master' into ha-feature-multi_os_support