Consider object and array patterns for scope

Currently, using an object pattern like

    var {foo, bar} = baz;

does not add `foo` and `bar` to the scope.

This change adds support for these patterns and extends the current type definitions to make them compatible with esprima. I hope this OK.

I believe there is a deviation from the Mozilla Parser API. Even though `PropertyPattern` is not officially defined, its signature in [`ObjectPattern`](https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey/Parser_API#Patterns) looks like `{ key: ..., value: ... }` whereas ast-types uses `{key: ..., pattern: ... }`.


Since `ArrayPattern` is already defined in https://github.com/benjamn/ast-types/blob/1a0a3f67a4b1784d1a55b651841cf33b57d14c09/def/core.js#L319-L322, you can avoid calling `.bases` and `.build` here and only redefine the `elements` field.

Small note: in the original definition, the supertype of `ArrayPattern` is `Node` instead of `Pattern`, which is probably a mistake that we should fix (in favor of `Pattern`).