optional params

Summary:
Add support for optional params and optional param types a la ES6/TypeScript.

Optional params have two forms, with default values (x=42) and without (x?).
Optional param types have one form, (x?:number).

Also added type support for rest params.

Test Plan:
make tests
./pfff -parse_js ~/www/

Reviewers: pad

Reviewed By: pad

CC: bhosmer, bryano

Differential Revision: https://phabricator.fb.com/D1263340