Only send beats for streaming protocols.
Tower code reuse across inject and capture scripts.
Parse browsers from the command line.
Launch browsers with WebDriver if available.

The Hub's createBatch RPC call accepts a `launchBrowsers`
property, which is an array of objects conforming to the
WebDriver JSON API's Capabilities JSON object:

https://code.google.com/p/selenium/wiki/JsonWireProtocol#Capabilities_JSON_Object

When present, these will be used to launch browsers with those
capabilities on a WebDriver host provided at the Yeti Hub's startup
with `--wd-host` and `--wd-port` options.

 - Abstracted local IP lookup from OS network interfaces into ip.js.
Fix capabilities for browser launching.

 - Fix platform names to match JSON protocol.

 - Send platform names in uppercase.

 - Fix defect in WebDriver launcher that prevented desired
   capabilities from being sent.
Lint, add missing deps, remove debug statements.
Add wd-user and wd-pass options.

 - Fix loglevel option for standalone Hub.
 - Add WebDriver options to usage.
Control most clearLine() calls in puts().
Fix broken browser option, typeof array is object.

Check if browsers is an array the right way.
Show message while browsers launch on the Hub.
Fix broken exit.
Cleanup WebDriver browsers after early aborts.
Us a better ID.

TODO: Generate these IDs in one place.
Prevent agent dispatch after batch destruction.
Display remoteAddress for agent names.
Delay loading JS until domready.
Maintain a list of agentIds to remove immediately.
Added iPad and PhantomJS user agents
More PhantomJS agent support
Fix broken CLI test; CLI reports PhantomJS UA.

Dav's recent changes caused PhantomJS to be recognized
as a UA on the CLI instead of being reported as "Mozilla".