ECMAScript 6 spread and rest support

This PR adds support for ECMAScript 6 style spread and rest operators in array literals and destructuring declarations with down-level code generation for ES3 and ES5.
That pattern is no longer there, it just ended up leading to a bunch of duplicated code. It makes more sense to do the branching locally--and if the downlevel case turns out to be different enough (which so far hasn't been the case) you can always break it out yourself.