wip: lazy properties for LexEntry and Sense
Merge branch 'master' into feature/liftimport

Conflicts:
	src/models/languageforge/lexicon/LexEntryModel.php
	src/models/languageforge/lexicon/Sense.php
Update composer.json to fetch from LazyProperty fork.
wip: Fix LexEntryListModel to allow for properties that may not exist.
Better E2E test for DBE view

Also started on creating a better page object for the DBE page.
Better document the various getLexeme functions
Remove old functions from DBE page object

Replace them with ones that rely on the improved Protractor 1.0 API.
Improve page object for LF DBE page

Browse section of page object now includes getEntryCount() function for
parsing the "N entries" text in the upper left. Test now checks that
this text matches the actual number of entries in the browse view.
(Which will NOT be the case with long lexica, due to infinite scrolling.)
Add getVisibleFields() to DBE page object

Test has been updated to demonstrate using getVisibleFields() and its
counterpart, getLabelsOfVisibleFields().
Refactor getLexeme() functions to be more general

We will be parsing dc-multitext directives (and several other directives,
whose parsers are still to be written) multiple times in the course of
parsing a Dictionary Browse & Edit page. So we should pull out a generic
function to parse them.
Add more useful functions in DBE page object

Also add demonstration of how to call them from E2E test.
Improve multitext parsing API in DBE page object

Instead of returning only the first entry when parsing multitexts,
default to parsing them as objects keyed by wsid. (E.g., in the
{"en": "word", "de", "Wort"} format).
Add page object for show/hide fields button

Since the button changes its text when clicked, it's best to identify it
by ID.
Refactor parsing functions into own library

New library dbeUtil.js contains functions for parsing dc-* directives
(dc-entry, dc-multitext, etc) and returning values in various formats
useful for E2E testing.
Minor refactor to dbeUtil: rename parsing strategy

Since we may end up passing in strategies for multiple fields, clarify
in the strategy names which field type they're intended for.
Tighten up dbePage code a little

There's a helper function in Webdriver to create a promise that's
already been fulfilled, basically "wrapping" a promise around a known
value. The getVisibleFields() function could be simplified by using it.
dbeUtil: rename getMultitextAsValue() for clarity

Since it returns the first value from the multitext no matter what, the
function's name should reflect this.
Refactor dbePage to further use dbeUtil

Now lexemes aren't being parsed differently from other multitext fields.
Add browse-view search field to page object
Simplify page object code

Instead of constantly repeating "this.functionName", we can essentially
create actual Javascript objects with member methods. This is a lot
simpler to read.