fix #3809

kwcall was modifying its argument list, which (1) is not allowed, and (2) in
some cases was not rooted (although the arguments themselves are always
rooted). this change also makes keyword argument passing faster in some cases.