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.
The comment on `getTypeFromBindingPattern` just below explains the `any`. It says:

> Return the type implied by a binding pattern. This is the type implied purely by the binding pattern itself and without regard to its context (i.e. without regard any type annotation or initializer associated with the declaration in which the binding pattern is contained). For example, the implied type of [x, y] is [any, any] and the implied type of { x, y: z = 1 } is { x: any; y: number; }. The type implied by a binding pattern is used as the contextual type of an initializer associated with the binding pattern. Also, for a destructuring parameter with no type annotation or initializer, the type implied by the binding pattern becomes the type of the parameter.

Unless an element has an initializer, we treat it as having type `any` when determining the implied type. And, since omitted and rest elements never have initializers, they are always regarded as having type `any`.