Added requeue and discard functionality to socket
Use reject instead of nack, add tests

Pretty basic tests if I'm honest.

(`reject` is more backwards compatible than `nack`, and for single
messages, otherwise equivalent)