SafariOptions and custom Safari extensions

[SafariDriver] Tests for custom Safari extensions

The SafariOptions API is modelled after the ChromeOptions API, to make
the learning curve easier. The APIs are compared at
 http://stackoverflow.com/a/17117849/938089

The SafariDriverExtension class has been renamed to SafariExtensions to
emphasize the new role of the class. It's not just responsible for the
installation of the SafariDriver, but also for the installation of custom
Safari extensions.

Moved several options from SafariDriver to SafariOptions:

- Hard-coded "port" property in SafariDriver + SafariDriverServer was
- Processing of "data dir" / "clean session" / "skip extension install"
  options has been moved from SafariDriver to SafariOptions.
  The corresponding capabilities are still supported, though deprecated.
- Previously, setting the "skip extension install" property implied that
  the user has installed a custom safari driver in the browser.
  Setting the option would skip the replacement of Extensions.plist,
    causing all existing extensions to stay.
  With the advent of custom extensions, "skip extension install" became
  ambiguous: Does the user want to use a custom driver, or skip installation
    of all extensions, in order to use his existing extensions?
  The "skip extension install" feature has been replaced with two methods,
    "setSkipExtensionInstallation" and "setDriverExtension".
  The NO_INSTALL_EXTENSION_CAPABILITY capability maps to
    "setSkipExtensionInstallation" for backwards-compatibility.
- The old capabilities have been deprecated, but they're still
  recognized. When the new SafariOptions.CAPABILITY capability is
  present, the old capabilities will be ignored.
- For backwards-compatibility with old Selenium remote servers, the old
  capabilities are still set by the toCapabilities() method.

Signed-off-by: Jason Leyba <jmleyba@gmail.com>