Properly handle TCP responses

Packets can be broken up into multiple packets, so the application layer
will have to reassemble them to make full packets.

This means that the 'data' events on the socket may not be completed packets.

Tests were also modified to have the data be split into 2 seperate
'data' events to emulate this behaviour.