`JRubyEnvironment#dispatch` now throws `IOException`.

Where coprocessor events allow `IOException`, this is still used. Where they do not, a new `dispatchNoThrow` is used instead.  This wraps the checked exceptions in `RuntimeException`.

`JRubyEnvironment#runRubyMethod` now also unwraps thrown `InvokeFailedException`, when the cause is also an exception.  Note we must be careful to check for `InvokeFailedException` from the right classloader.