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.
No. We generally assume that it is safe to get the index of a child element in a parent collection without checking for -1 (as that should never be the case).