Refactor and test the conduit receive consumers

This changes the API of `receiveMessage` to take a `ResumableSource`,
rather than a `Source`, which should allow for more consistent
continuations. It also adds a helper function `receiveHandshake`, for
receiving handshake messages exclusively.