Destructuring and cover grammar fixes

This changes the strategy from using a transformer to transform the
cover grammars into rewinding the scanner and reparsing using the
target grammar.

This also introduces a AssignmentElement which is used for the
elements of the assignment pattern (like BindingElement which is used
for binding patterns (and default parameters).

Fixes #183
Fixes #836
Fixes #838
Fixes #969
Fixes #1015
Another way to implement this would return `{propertyName: name, location: start}` at the bottom here and at the top where you have `parseXXX(true)` wrap the return, eg `createBindingElement(this.parseXXX())`.  Don't know if it's clearer.