fix(test): simplify algorithm

path.normalize() works the same on every OS as recommended by Julie
chore(ci): fix URL for sauce connect download
feat(webdriver): version bumps for webdriver, chromedriver, webdriverJS
chore(docs): Remove outdated API document and point to the website.
chore(release): version bump and changelog for 1.4.0
fix(runner): setTestPreparer does not work

setTestPreparer would always set the testPrepare to config.onprepare during
`runner.run()`. This is breaking for code that relies on setTestPreparer
directly.
chore(protractor): speed up calls to then/each/map/reduce
feat(launcher): reorganize launcher + add option to store test results as JSON
chore(launcher): fix jshint issues
feat(plugins): basic tools for adding plugins
feat(scripts): add framework to test protractor
docs(server-setup): clarify that seleniumAddress overrides sauceUser/sauceKey

Closes #1457
docs(faq): add question and answer for debugger not pausing
fix(test): use a platform agnostic way to run minijasminenode
refactor(test): improve debug log wording
Merge remote-tracking branch 'main/master' into fix/improve-npm-test-compatibility-on-windows

Conflicts:
	package.json
	scripts/test.js
Merge branch 'fix/improve-npm-test-compatibility-on-windows'