lib/client: make createConnection callback-driven

Before this commit, the createConnection option to uhura.Client was
expected to return a net.Socket-like object.  This commit makes it
take a callback that can be invoked synchronously or asynchronously.

Makes it possible to (for example) make a HTTP CONNECT request to a
proxy first before passing on the connection to Uhura.
test: don't use hard-coded tcp port numbers

Don't use hard-coded TCP port numbers, makes it impossible to run tests
in parallel.  Bind to port 0, that makes the operating system assign it
a random port number.
test: add createConnection regression test

Verify that the createConnection() callback gets called again on
reconnect.
lib/client: add ref() and unref() methods

When ref'd (the default), the Uhura object keeps the event loop alive.
No-ops when the underlying socket object doesn't have ref() or unref()
methods.  The ref/unref state persists across reconnects.

Fixes strongloop/strong-agent#30.
lib/client: conditionally unref reconnect timer

Commit ef477d1 fixed a hang on exit by unconditionally unref'ing the
reconnect timer.  It worked but it's ultimately a cheap hack.

As of the previous commit, uhura explicitly tracks whether the socket
is ref'd or unref'd.  This commit extends that to the reconnect timer.

I'm afraid there's no regression test.  Reliably testing for event loop
stalls is pretty much impossible with mocha.