feat(protractor): allow advanced features for ElementArrayFinder

changed ElementFinder as a subset of an ElementArrayFinder.

This enables actions on ElementArrayFinders, such as:
`element.all(by.css('.foo')).click()`

The function `filter` now returns an ElementArrayFinder, so you may also do:
`element.all(by.css('.foo')).filter(filterFn).click()`

or

`element.all(by.css('.foo')).filter(filterFn).last().click()`
fix(element): isPresent should not throw on chained finders

Now, `$('nonexistant').$('foo').isPresent()` will return false instead
of throwing an error. This change also adds tests that ensure
that catching errors from promises works as expected.
refactor(tests): move equivalency function to the elements spec file

It makes more sense there than in locators.
tests(promises): add a couple tests to ensure that promise resolution works

These tests ensure that `ElementFinder`, which extends promise, behaves
properly when being resolved before an action has been called on it.

These tests will be useful to have during updates of WebDriverJS.

See #1307
docs(referenceConf): clarify that rootElement is a CSS selector