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 agree that having a locator type at a widget level is a bad idea for our default implementation.

It sounds like the change being suggested by @SMxJrz is to move findElement() to EWD. The current findElement would become findElementByTrialAndError(String locator). We would also have findElement(String locator) where we could allow the method of finding to be configurable (or restricted to a single type). Element would then call out to EWD in the find element method. This would allow a session to be configured to use a different findElement method or restrict findElement to only one type of locator throughout it's existence.

For setting the method of finding an element at the widget level, I agree with @bryantrobbins that we could use state similar to Javascript click to change the method used by findElement. 

However, we have previously discussed the drawbacks of the use of state for Javascript click and the need to enforce resetting the configured state after changing it to be used by a single widget. I would be against adding another state value to EWD unless it enforced resetting the configured state.