Performance improvements on Element.findElement()

Made multiple performance improvements:
- Allow users to specify locator type upon construction of a widget (XPath, ID, Name, etc) so that we can directly retrieve the By locator
- Store WebElement object for reuse
- Store By locator for reuse

This is a fix for #64.
I think this is a good idea and important for backward compatibility.

Note that we have to handle state in EWD specially (see how we handle the Javascript click boolean), but I think it should be doable.

How big is this change?