Intersection types and grouped types

So we already have union types, which look like `var a: Foo | Bar` and mean that `a` is either a `Foo` or a `Bar`. Intersection types look like `var a: Foo & Bar` and mean that `a` is both a `Foo` and a `Bar`. I have made the `&` operator bind more tightly than `|`, so `A | B & C` parses as `Union(A, Intersection(B, C))`.

In order to disambiguate I have also added the ability to use parens to group types together. For example, 
`(A | B) & C` means `Intersection(Union(A, B), C)`. These parens also let you specify types that weren't possible before, like `(() => number) | (() => string))`. This is necessary because `() => number | () => string` would have been parsed as a function that returns either a `number` or a `() => string`.

This is built on top of https://github.com/facebook/esprima/pull/64 which I suppose didn't really need to be it's own pull request.

Test plan: npm test and ran the esprima tester
Before my change, the error was an `Unexpected token )`. This is because `(string) => number` is an invalid type. It should be `(string: string) => number`. After parsing `(string`, esprima assumed this was a function type parameter so it was expecting an `:` or `?`. However it saw a `)`, thus causing the error.

After my change, `(string)` became a valid type. Up through `(string`, esprima knew this could either be a function type param or a grouped type. Since the next token was not a `:` or a `?` it knew it was definitely a grouped type. Cool. Then esprima sees a `=>` and gets confused, hence the new error.