saucelabs: deferred.resolve() should be async by itself I think.
options: Use path module when resolving config file location.
options: Try to read browser ids from a file only if such file exists.
options: Change internal representation of agents (browsers or devices).
options: Cleanup config object before passing it further. Separate farm specific options from each other.
browserstack: Refactor.
config: Keep farm specific options separately.
yeti: Fix typos.
farm: Activate BrowserStack support.
farm: Check for access credentials in constructor.