ElementLookup (fixes #25 and #12)

Ties WebDriverElements to the means that finds their backing WebElement.
This allows better error reporting about elements that are not found or
visible or are stale. It also cleans up how elements are found for
chained and nested locators, which is critical for ViewElements since
they are very commonly nested or chained underneath elements or locators
respectively.

It is interesting to note that there is very little difference between
nesting and chaining. At this point, nesting just means looking up the
locator for an existing element, and then chaining that. It seems like
there is maybe an opportunity to consolidate logic here or this is just
how it should work.