Only save the display_state on errors

This results in slightly less callbacks and message spam for unchanged data.
Add return values on set_current_slide and override_shown

We will use them to decide if the current_slide call in websockets succeeded.
Return failure on invalid slide in current_slide

We now trigger failure on setting the current_slide to invalid slide id. We also don't send any messages to the channels when this happens.
Handle more message types