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.
please use a block, or at least comment that it is intentional that you are using an empty statement as the ForStatement.  I had to read this several time to realize you weren't just writing "[" some number of times.