socket buffer sizes may now be set

if the buffer size is smaller than the current length, we store
the desired size as the pending size. as the buffer drains, we
continue to gradually reduce the buffer size until it reaches the
desired level.

closes #150