Add send_all, recv_all and a test

These functions allow for easy send/recv of multi-part messages for both blocking and no-blocking use.

I also tested this against the other pending pull requests.  It should merge cleanly on its own or with the other open requests.