Integration test for UDP

Also fixes a few bugs. One was an old bug that wouldn't allow you to
bind to port 0 for a UDP service. The others were new and related to the
transport refactor.
Only accept valid UDPService handler callables

Previously you could get your app in a weird semi-frozen state by
passing a bad handler callable.