chore(travis/ci): add more logging about sauce connect to ci
chore(travis/ci): fix permissions for printing logs script
docs(getting-started): relative path update

Updated document to correctly state that spec paths are relative to the
protractor config instead of the spec file.
docs(api): Specify the anchors for TOC to link to.
docs(api): update for version 0.23.1

Should have gotten added at the last release.
refactor(runner): split framework adapters into their own files and add documentation

Split out the mocha/cucumber/jasmine bits of the runner for better separation
and readability.

Closes #792
chore(package): fix dependency notation for request
refactor(jasminewd): use jasminewd from its own node module

The Jasmine Webdriver Adapter is now its own npm module. The code has been
moved to http://www.github.com/angular/jasminewd.

Remove the code from Protractor, and add a dependency on jasminewd@1.0.0.
docs(driverprovider): add documentation for the requirements of driverproviders

Also, remove the redundant `.dp` in their filenames.
docs(driverprovider): remove parameters from doc
tests(driverprovider): update driver provider medium tests with new filenames
feat(launcher): Add support for maxSession

  - add support for maxSession and capability-specific specs
  - cleaned up launcher (refactored out taskScheduler.js)
  - (breaking change) changed the config to shard test files; also sharding is specific to capabilities now
    - Before: config.splitTestsBetweenCapabilities
    - Now: config.capabilities.shardTestFiles or config.multiCapabilities[index].shardTestFiles
chore(testapp): change the default port from 8000 to 8081

This prevents conflicts with the default port for the angular.js application.

Closes #887
feat(sauceprovider): append spec filename to capabilities.name
refactor(protractor): reorganize internal structure of elementFinder/webelement

 - Allow chaining of actions (i.e. element(By.x).clear().sendKeys('abc))
 - first(), last(), and get(index) are not executed immediately, allowing
     them to be placed in page objects
 - Rework the way that elementFinder and wrappedWebElement is represented
 - Breaking changes:
   - element.all is chained differently
       Before: element(By.x).element.all(By.y)
       Now:    element(By.x).all(By.y)
     However, using element.all without chaining did not change,
       i.e. element.all(By.x)
   - Changed the way for retrieving underlying webElements
       Before: element(By.x).find(), element(By.x).findElement(By.y),
                 and element(By.x).findElements(By.y)
       Now:    element(By.x).getWebElement(),
                 element(By.x).element(By.y).getWebElement(),
                 and element(By.x).element(By.y).getWebElements(),
                 respectively
   - browser.findElement returns a raw WebElement so $, $$, and
       evaluate will no longer be available
test(selenium): add a mock driver provider for integration testing

With `mockSelenium: true` in the config, an instance of WebDriver using a
fake executor will be used. This executor returns a successful test response
for any command, and never connects to a real browser.
chore(test): remove shardingConf.js from test.js
chore(release): version bump and changelog for 0.24.0.
docs(release): udpate release notes with more useful links and version info
docs(api): match the version for the api docs

The version doesn't update properly with our current release process because
the tagging comes after generating new docs. We should fix this. Manually
correcting for now.