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.
Is a new constructor necessary? In my mind there are two use cases for a specified locator type: a "global" level locator type that most widgets in the project use, and a "widget" level locator type defined per widget; it's a property of the widget/element rather than a property of the specific instance of the widget/element.
Could we instead create Element#locatorType, reference this in Element#findElement, have setters in Element to change at the "global" level, and let widgets override the method to change at the "widget" level? This would allow pre-existing projects to have the performance gains without requiring new/modified/deprecated constructors in the widget.