Feature to enable asynchronous event driven network event handling

Implemented asynchronous event driven network handling.

The current network code works well, but relies on what amounts to polling behaviour where one sets up non-blocking sockets, but then have to rely on periodically calling from a timed loop such as emscripten_set_main_loop because select/poll can't have blocking behaviour in an asynchronous environment like JavaScript.

This pull request provides a mechanism to register callbacks for the key network events from both C code and native JavaScript code. The callbacks are linked to the underlying WebSocket callbacks, but they trigger after the emscripten library calls have done their magic. This means that when the message callback triggers for example there will be data in the socket buffer ready to be read.

The various callbacks are passed the file descriptor of the triggering socket, so it is possible to avoid the use of select/poll as the fd is already known, but equally it's possible to use largely unmodified select/poll based code and just use the async callbacks in place of emscripten_set_main_loop. The test case submitted with this pull request uses that approach.

I've also implemented getsockopt with support for SOL_SOCKET/SO_ERROR, which should hopefully resolve https://github.com/kripken/emscripten/issues/2211

The primary use case for this work is to avoid the need for polling network activity, which will improve efficiency and latency for applications that make use of it. It should also make it easier to incorporate emscripten compiled code in other event loops.
I'm just about to push what is hopefully an improvement to this. It's probably still not perfect, but I think that it is at least now follows a pattern that is consistent with other not implemented or partially implemented calls such as pipe(), crypt(), encrypt() and it provides more descriptive errorring than say execl() or fork() which just setErrNo and return -1

I've also changed the error code to ENOPROTOOPT as I think that's probably more accurate than EINVAL (ENOPROTOOPT in the man page says "The option is unknown at the level indicated.").

What do you reckon?