refactor(locators): refactor locators to remove duplication between findElement and findElements

This change removes the need to have a client side script to find one element
and a second script to find an array. Now, all custom locators return multiple
elements. Protractor will use the array and patch it to find a single element,
and now it also returns a custom error which should be more readable. Also,
introduces a warning when a locator that matches more than one element is used.
tests(alert): add test showing how to deal with alerts
refactor(locators): move findElementsOverrideHelper to a member of Protractor

Also fix a small change introduced in the last commit where the dialog was
never closed.
feat(locators): add the ability to add custom element locators with by.addLocator

Custom locators can now be added using by.addLocator(<name>, <script>), where
script is a self-contained snippet to be executed on the browser which returns
an array of elements. Closes #236.
docs(faq): add a section on which version of Angular is supported