Rewrite WebDriver interaction to support target switching and frames

I realized darcy's promise of having a Browser represent one window
within a driver only was not entirely being kept. In order to ensure a
driver was always pointing at what you intend, we need to keep track of
inteded targets within a driver, and defensively check we are pointing
to the right target before every call. Thus, the "TargetedWebDriver" was
born -- a Proxy of a WebDriver (and all of its interfaces) that switches
to the correct target for every method. Admittedly its a bit of a
sledgehammer, so a CachingTargetLocator is used that prevents us from
switching when it would be unnecessary.

This commit also adds support for frames in accordance to the updated
darcy-web API. In doing so it was necessary to make the ParentContext
API more consistent in darcy-ui.

I also took the opportunity to clarify some of the interface names as
well as reorganize the packages.