Syndic main loop develop

See Issue #10164. 

The main loop in this PR never spends more than syndic_max_event_process_time processing events and always goes back to the poller if there isn't an event immediately available. Having tested this I never saw it in my set up hit the 0.5s limit provided by syndic_max_event_process_time. Exiting the event process loop when ever it would block would have been sufficient.

Because we're now exiting the event process loop whenever it blocks there is also a timer added to control event aggregation. To get similar behaviour to before events are stored by default 0.5s (syndic_event_forward_timeout) to potentially be aggregated before being forwarded to the master.