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.
Any reason for the extra `r` variable?