nsqd: dont alloc huge backing array for HTTP /mput

if a message is kept around (inflight, deferred, etc.)
and was part of a large /mput, the entire backing
array for that message body's slice was being retained
(preventing it from being GCd).

fix by refactoring /mput so that messages are allocated in
separately read chunks.

also, while in here make /mput atomic by validating
all messages up front before pushing to the topic.
(matching TCP MPUB behavior)
nsqd: dont retain client pointer for inflight msgs

more cleanup relating to what pointers might be retained
preventing proper GC.

this changes the in-flight messages struct so that it
uses an int64 ID rather than a pointer to ensure
that only the original receiver of a message can
respond to it.  this required changes to the channel
to store clients as a map[int64]Consumer in order
to lookup the proper client by ID.
Merge pull request #242 from mreiferson/in_flight_client_242

nsqd: dont retain client pointer for inflight msgs
Merge pull request #239 from mreiferson/http_mput_bytes_239

nsqd: dont alloc huge backing array for /mput