[SafariDriver] Tests for custom Safari extensions

The expected API is modelled after ChromeOptions, to make the learning
curve easier. s/ChromeOptions/SafariOptions/, and one is ready to go.
For a comparison of both APIs, see http://stackoverflow.com/a/17117849/938089
CrossDomainTest should extend SafariTestBase

Because of wrong inheritance, the tests behaved badly:
At the end of a test run, multiple Safari windows remained unclosed.
[SafariDriver] Support custom safari extensions

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.
[SafariDriver] Close websocket on quitDriver()

Before this fix, calling safariDriver.quit() would always throw
"An existing connection was forcibly closed by the remote host".

Substituting the "DriverCommand.QUIT" message for "connection.close()"
fixes the issue. The SafariDriver extension will no longer receive the
"QUIT" message. This has no side effects, because this command was
mapped to a nullFunction in the SafariDriver extension's JavaScript code.
Move options from SafariDriver to SafariOptions

This commit does not break any existing functionality (tested).
Changes:
- The JSON serialization protocol has been altered to meet the new
  requirements.
- 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.