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.
fix(cssShortcut): fix $$ global throwing error
fix(launcher): output error messages when child processes exit with error

Version 0.24.0 introduced a bug where child processes would error without outputting
the error message. Fix. See #902.
fix(locators): Missing information in warning/error messages

Webdriver's built-in locators (such as `by.css()`) appeared as
'undefined' in protractor's messages.

For instance, if a locator matched multiple elements, protractor
would print the following message: 'warning: more than one element
found for locator undefined- you may need to be more specific'.
style(launcher): remove unused variable.
docs(release): API generation should be done after version bump
chore(release): version bump, changelog, and API for 0.24.1
style(api): fix typo
fix(protractor): throw index-out-of-bounds

See https://github.com/angular/protractor/issues/915
- to make error more specific instead of propagate later
fix(protractor): make ElementFinder.then resolve to itself instead of null
test(count): test that element.all.count returns 0 if no elements are found