prevent race condition on msg.Attempts

ready for review.  

Benchmarks:
before:  http://pastebin.com/znPkN8x3
after: http://pastebin.com/RvJZdHRV

We can't change our [message wire protocol](http://nsq.io/clients/tcp_protocol_spec.html#data-format) here, so we have to continue to write out a `uint16` as two bytes. Additionally, I believe all the accesses of `m.Attempts` need to use the `atomic` library so that variable is goroutine safe.

ie:
```Go
attempts := atomic.LoadUint32(&m.Attempts)
binary.BigEndian.PutUint16(buf[8:10], uint16(attempts))
```