Refactores gather-read and scatter-write

The header_data_type is now unknown to the
socket scructure.
We could use `using value_type = typename LeftBuffers::value_type` to get either `mutable_buffer` or `const_buffer`.