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 explain this bit.  If there is a dotDotDot token, then we push the 'any' type into the elment types.  Then we get the union type that includes that any types?  Why is that desirable here?  Thanks!