More natural streaming support for UDP

When you fork a loop from a UDP dispatching loop, that loop has its own
socket that it can use to continue communicating with the client. So you
don't have to write a separate UDPClient class that the server uses to
talk back to the client. You just diesel.send/diesel.receive as usual.
Changed Service API and cleaned up UDP streaming

Both TCP and UDP Service handler functions now take the service itself
as the first argument.

UDP streaming is now enabled via an optional argument on the UDPService
class initializer.