function _nodeIsFunctionWithRestParam(node) {
  return (node.type === Syntax.FunctionDeclaration
          || node.type === Syntax.FunctionExpression
          || node.type === Syntax.ArrowFunctionExpression)
         && node.rest;
}
Desugars ES6 rest parameters into an ES3 arguments array.

function printf(template, ...args) {
  args.forEach(...);
}

We could use `Array.prototype.slice.call`, but that usage of arguments causes
functions to be deoptimized in V8, so instead we use a for-loop.

function printf(template) {
  for (var args = [], $__0 = 1, $__1 = arguments.length; $__0 < $__1; $__0++)
    args.push(arguments[$__0]);
  args.forEach(...);
}