es_sink: thread lifecycle now follows start()/stop() instead of es_sink class lifetime, this allows the block to delay flowgraph stop()/wait() behavior until all event handlers have been handled