Ensure exceptions can't break reduce

This removes the fast dispatcher that was tailored for reduce in favor of the default, safer dispatcher.  There is a tiny perf hit, since the default uses a try/catch and `apply()`.  Unit test derived from @benurb's example in #401.

Fix #401