Do not wrap arg arrays in RubyArrays prematurely

Hey @enebo, here's the first bite-sized chunk of #1143.

This is pretty much a straight refactor which makes it easier for deeper calls to determine exactly what their args look like (when transformed into a RubyArray too soon, it was hard for yielders to tell if you have multiple args, or one array arg).  Also has the added benefit of removing some allocations and redundant code.

(I also re-targeted this at the 1_7 branch since I saw in other comments that it's going to be around for a while and should be kept as merge-friendly as possible.  Let me know if that was the wrong call and you'd rather master)

As always, let me know if you have any questions.