Add ability to register element implementations at runtime

This has a few key use cases:
- Different WebDriverBrowserFactories can implement element types
  differently if they so choose (say to work around a bug in that
  driver).
- Any consumer of darcy-webdriver can add new element implementations as
  they see fit. (For example a "JavascriptButton" whos implementation
  clicks via Javascript events instead of via WebDriver plugin).

To use these alternate implementations in your views:

Elements.element(JavascriptButton.class, By.id("example"));