Problem: zsys_handler_set was confusing

This method did confusing stuff, and allowing handler_fn to be
NULL seems senseless. I've simplified it so that it's more obvious
what it does.