dgram: make .send cb act as an "error" event handler.

This allows users to provide a callback that handles potential
errors resulting from a `socket.send` call. The original behavior
of emitting the error event on the socket is preserved.

Fixes joyent/node#4846.
The eventOrder and callbackOrder state machine-y approach looks like it could be simplified somewhat.  You're expecting one to come before the other, right?  Just check in-place that order === whatever the expected value is at that time.