client sharing read/write buffer

Client either writes/reads from socket, never does them together.
So the buffer can be shared which will bring down the memory requirement
for the client by half.

But the client has to watch for 2 things
1) On Write the buffer expands as necessary. So the buffer needs to be
reinitialized if it grows.
2) On Read, if the buffer can't accomodate it grows as necessary, this
case also needs to be handled.

This works as expected and the unit tests are passing. Will put it
through VPL to measure the efficiency of the fixes.