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 would support deprecating the old constructor if the new one used just a By. For that new constructor, we would need a method of populating the locator String from that. The locator String is required for the widgets. Code in this project and outside of it depend on that. I suggest making that a separate change from this one.