Refactor the OIIO_DISPATCH macros.

Previously, they cause a return. Now they set a variable with the return
value. This is helpful for functions that want to dispatch, and then
do more work without a forced return.

This makes use of these macros a bit more flexible.

This is all internal to OIIO, by the way. This isn't a public API.