Fix insane chunking behaviour in the UDP forwarder

This PR makes two changes:

1. It fixes a bug where chunked UDP packets were throwing an unhandled error, caused by a missing argument in a recursive call to `send` (see #45).

2. It refactors the chunked case so that all of the data is sent through a single socket, rather than new sockets being opened and closed for each chunk.

Extra unit tests have been written to cover both of these changes.