fix unit tests: corrected mutex init for Win32 and make sure preconditions for a successful should_keep_alive test are met: request_info.status_code should carry a legal HTTP response code.
parse_http_headers() and consequently parse_http_request() MUST set the connection::num_headers value to produce predictable and consistent output for all HTTP requests, legal or not. (Issue found thanks to unit tests.)
fix: regular HTTP request connections will not block on recv() (pull()) anymore and will abort when the mongoose server shuts down (stop_flag). Introduces the 'abort_when_server_stops' connection attribute which can be set by a new mongoose_ex API mg_set_connection_abort_mode().

Also removed the mg_pull() API as mg_read() should be able to act like that when it's not involved with serving HTTP requests.
fix forward_body_data() for 0-length PUT/POST actions and invocations which didn't set the content_len, i.e. requests which don't have the Content-Length header and such.
comment/document mg_connection addition
add MG_RESTART_MASTER_BEGIN/MG_RESTART_MASTER_END events so user code can act when the mongoose server is shutting down and re-initializing the listeners.
fixed several 'server stop' phase race conditions and introduced a new example showcasing how to loop mg_start() + mg_stop() to produce a restartable server:

- produce_socket() signals sq_full. produce_socket() MAY be invoked at the time the server is stopping and has just broadcast on sq_full to wake up all workers: the sq_full signaling inside produce_socket() would nuke the broadcast on Win32: see pthread_cond_broadcast() and http://www.cs.wustl.edu/~schmidt/win32-cv-1.html

- DEBUG_TRACE() would crash or indefinitely lock up worker threads which were about to terminate: this is because these calls would invoke the flock-emulation calls while those critical sections are being deleted in the main thread, causing unpredictable behaviour. See the 'WARNING' comments at the end of the worker and master thread for an elaborate explanation why the last DEBUG_TRACE() in those threads has been moved up a bit.

- the graceful close logic has been made suitable for both 'regular' sockets, i.e. sockets which should abort/close when the server stops, and sockets which should remain operational when the server stops (so that special user code can use the mongoose socket logic for other purposes while the 'mongoose server' is shut(ting) down).
ws police
mg_cry() / mg_vcry() have severity "error"; mg_log() / mg_vlog() have default severity "debug"
introducing the user_ssi_command callback: now user code can process all SSI tags.
SSI: less copying of SSI tag/path strings and no risk of sscanf() buffer overflows.
bugfixes for custom error pages (wrong check --> wrong return value), SSI tag extraction (quoted value) and connection write error checking during HTTP error page production.
sick & tired of the GCC warning output: cutting that down. Killed many warnings for both MingW GCC and Linux GCC; replaced INT64_FMT with the official C99 defines from inttypes.h for this purpose; maximized sanity checking: added extra checks for printf() and scanf() where available (MSVC20xx Enterprise).
fixed grave select() bug: UNIX select(n, ...) expects 'n' to be highest socket handle value PLUS ONE: off by one errors in multiple places in my code >:-(

Also fixed a 100% CPU load scenario where all connections (one or more) are queued but inactive: consume_socket() would then loop as fast as possible in the outer loop as sq_full remains signaled but select() keeps spitting back return value 0. Increase the MG_SELECT_TIMEOUT_MSECS_TINY constant if you want to improve CPU load reduction while you introduce that number of milliseconds delay to new connections at the same time in worst case scenarios (connection accepted while worker thread(s) are in that cond_wait()-based delay period).