Improve consistency/correctness of arg handling

Move arity-based arg preparation to a more central place, improving
consistency of how args are handled between both yield and block.call.

This involves migrating many calls to pass an IRubyObject array of args
rather than prematurely wrapping that array in a RubyArray (which makes
it impossible for deeper calls to determine if they have one Array arg,
or multiple args).

As an added side effect, JavaInternalBlockBody now gets correct arg
treatment, and can be used to get RubyEnumerable cleaner and fully
rubyspec-compliant