writer: support "async" publishing / nsq_to_nsq

For flexibility, `Writer` should provide `PublishAsync` and `MultiPublishAsync` methods that take response channels and allow a client to more intelligently batch work without having to resort to goroutines.

This pull introduces a slew of `Writer` public API changes:

 * `NewWriter()` now takes the destination `nsqd` address instead of `HeartbeatInterval` (which can now be set via the public property after initialization)
 * added `PublishAsync` and `MultiPublishAsync`, which take a `chan *WriterTransaction` and variadic arguments that are passed to said channel via `WriterTransaction.Args`
 * dropped `ConnectToNSQ` in favor of connections being handled automatically (lazily triggered via any publish call).  This includes reconnects.

cc @jehiah