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 (go1.3 only)
nsqd: split apart backend queue code for testing
nsqd: update TestHealth
Merge pull request #437 from mreiferson/direct_error_feedback_437

nsqd: better diskqueue error backpressure