Cosmetic change. Rename body to value where appropriate
Optimize the code path for sending a command

Check for error directly in sendCommand(). This avoids a deferred
method call which also implied referencing and dereferencing a
pointer. Benchmarks indicate a ~3% performance improvement.
Add benchmarks for only setting a key
Optimize path for reusing connections

Return only one argument from getFreeConn(), the boolean does not
add any information.
Move condRelease() to Client, this way conn does not have to store
a pointer to the Client.
Remove conn.release(), call putFreeConn() directly.
Pass only the conn pointer to putFreeConn(), get its addr inside
putFreeConn().
Performance increase is ~1-2%. This commit also decreases the size
of the conn struct in 32/64 bits (depending on pointer size).
Loop while reading from the connection until we have enough data

Use an optimized version of io.ReadAtLeast. This slightly slows
down benchmarks (less than 1%), but is required in order to
correctly read large values, otherwise sometimes Read() will
return less bytes than asked.