Terminate worker threads gracefully.

mk_scheduler

Call mk_plugin_thread_init() before entering worker loop.
Call mk_plugin_thread_exit() after worker loop terminates.
Call mk_sched_node_destroy() after worker loop terminates.
Add mk_sched_node_exit() for terminating scheduler epoll instance.
Create joinable worker threads instead of detached.

mk_plugin_next

Add mk_plugin_thread_init(), calls plugin thread init functions.
Add mk_plugin_thread_exit(), calls plugin thread exit functions.

mk_epoll:

Add mk_epoll_exit() for terminating an epoll instance.
Exit mk_epoll_init() loop when epoll termination is detected.

mk_server:

Exit mk_server_loop() when epoll termination is detected.

mk_signals:

Call mk_sched_node_exit() if SIGINT or SIGTERM signals are received.

monkey:

Join all worker threads before exiting main().
mk_plugin_next: Call init/exit hooks on add/delete of plugins.
mk_scheduler: Add mk_sched_free().
mk_plugin_next: Fix buffer size in mk_response_add_header().
mk_epoll: Fix uninitialized data warnings.
monkey: Free scheduler and config resources on termination.
Drop network plugin type.

liana

Remove liana network plugin.

mk_plugin

Drop network plugin type.

mk_socket

Copy implementations from liana plugin.

monkey

Don't print plugin name, not set.
mk_queue: Add mk_queue_search() and mk_queue_casesearch().
mk_http_transport: Use mk_queue_casesearch().
mk_protocol: Add init_thread and exit_thread hooks.
mk_http: Store pointer to client_session in event->data.
mk_queue: Add optimized mk_queue_is_empty().
mk_http: Optimize search for content-length header in parse.
mk_http_transport: Optimize chunk header generation.

Don't use sprintf() since the format is easy to do by hand.
mk_plugin_next: Fix undefined error on mk_plugin_stream().
mk_http_transport: Use mk_string_itop() instead of sprintf().
mk_http: Add http_request_info_header().

Uses direct traversal on request_info to fetch headers.