Simplify some class names and add more Javadoc
Rewrite ElementContext to proxy elements by default

This change makes working with elements more consistent when you are
forced to work with elements who's locations are only known at runtime.
Previously, context.findElement would find the element at the time of
call, and throw NotFoundException if there was nothing found. Meanwhile,
elements declared as fields of Views would happily accept calls to
isDisplayed() without throwing a fit if an element could not be found.

After this change, the new default behavior for elements found
explicitly by asking the context which match the behavior of element
fields; that is, they will be proxies that don't *really* find the
element until you try to do something that requires its presence.
Therefore, a call to element.isDisplayed() is always safe.

Consequently, the ElementContext interface's "findElement(s)" functions
aren't very applicably named anymore since there is no actual *finding*
involved. These methods have been deprecated and replaced with a new
more aptly named and fluent API. In completing this API some classes
were reorganized / fixed / refactored. Most notably, View's context's do
not need to promise that they are also ParentContext's, and as such, the
ViewContext interface is effectively replaced by ElementContext and is
now deprecated.

To find an element immediately, see Locator#find.
Clean up lazy element initialization code a little bit
Apply new ElementContext pattern to ParentContext
Fix compile error in ProxyElementSelection
Update unit tests for new context APIs