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.
Could you add some comments to this code explaining what it is doing?  I have no intuition as to what it is trying to do, or why it is desirable behavior.  Thanks!