Upgrade Protractor to version 1.1.1

This will break a lot of the E2E tests. See the release notes at
https://github.com/angular/protractor/blob/master/CHANGELOG.md for a
list of the breaking changes. Most relevant changes for us:

* Most elementFinder functions now return Protractor elementFinder
  objects, instead of Webdriver objects. Among other things, this means
  that element.all(by.foo).first().element(by.css('input')) is now
  legal, and there's no need to switch between .element() and
  .findElement() nearly as often.

* Deprecated locators like by.selectedOption have been removed, and
  should be replaced with by.model. element(by.selectedOption('foo'))
  can be replaced by element(by.model('foo')).$('option:checked')
Update E2E tests for new Protractor API

Notable changes: findElement() -> element(), and new dropdown handling.

Dropdowns' values can no longer be accessed with by.selectedOption() but
must instead be accessed with $('option:checked').
Get E2E tests running on ScriptureForge again

E2E tests are now running on ScriptureForge after the Protractor upgrade
to 1.1.1 (with its breaking API changes). Two tests still fail when the
whole test suite is run, both of them in the activity page test. They
pass when the activity page is run on its own, but they fail when the
entire test suite is run because they make assumptions about "what is
the last element on the activity page going to contain?" that are false
when the entire test suite is run. Those two tests will need to be
re-worked at some point, but their failure is not due to the API change,
so this is not the right commit in which to re-work them.
Example of how to use new Protractor API

The new version of the clickEntryByLexeme function demonstrates how to
use Protractor's new element.all().filter() API: the function you pass
to filter() needs to return not a Boolean, but a *promise* of a Boolean.
Thus you'll write code that looks something like:

element(by.selector).filter(function(elem) {
    return elem.getText().then(function(text) {
        return (text == "What I am searching for");
    });
}).then(function(results) {
    // Either loop over the results, or if you're only expecting one:
    expect(results[0].getAttribute('href')).toMatch("something");
    results[0].click();
});
Merge branch 'feature/protractor-upgrade'

This upgrades Protractor to version 1.1.1, with its improved API for
writing E2E tests. Most relevant changes for us:

* Most elementFinder functions now return Protractor elementFinder
  objects, instead of Webdriver objects. Among other things, this means
  that element.all(by.foo).first().element(by.css('input')) is now
  legal, and there's no need to switch between .element() and
  .findElement() nearly as often.

* Deprecated locators like by.selectedOption have been removed, and
  should be replaced with by.model. element(by.selectedOption('foo'))
  can be replaced by element(by.model('foo')).$('option:checked')

* New element.all().filter() API, used as follows (note that passed-in
  filter function should return a *promise* of a Boolean):
    element.all(by.selector).filter(function(elem) {
        return elem.getText().then(function(text) {
            return (text == "What I am searching for");
        });
    }).then(function(results) {
        // Either loop over the results, or if you're only expecting one:
        expect(results[0].getAttribute('href')).toMatch("something");
        results[0].click();
    });