all: Use Stream interface for controller client StreamJobEvents

This also fixes some cases that did not properly handle the channel being closed, which resulted in panics in some error paths.