nsqd: remove topic router goroutine

this change accomplishes a few things...

1. goroutines calling topic.Put*() via HTTP or TCP
   will now be able to directly detect failed diskqueue writes,
   giving the type of feedback you need to retry, without
   any asynchronous interaction.

2. related to (1), goroutines (and thus clients) will experience
   *direct* backpressure when messages are written to disk.

3. removes an extra goroutine per topic and an extra channel
   send/receive per PUB.  the aggregate effect on benchmarks
   is significant because this setup has far better concurrency
   characteristics (41% faster):

    $ GOMAXPROCS=4 ./bench.sh
    PUB: 2014/08/15 10:17:37 duration: 996.190589ms - 191.464mb/s - 1003823.978ops/s - 0.996us/op
nsqd: remove channel router
nsqd: re-use diskqueue byte buffers in go1.3
nsqd: split apart backend queue code for testing
nsqd: update TestHealth