use correct prototype on our exit (#87495)
fix dzil warnings
refactor/simplify argument handling
force exit argument to be a number
use Return::MultiLevel to support exit in eval