Ban trailing commas in type parameter lists

Summary: HHVM rejects this, we should too -- it seems much more likely
indicitive of an error than trailing commas on functions.

Fixes https://github.com/facebook/hhvm/issues/3168

Reviewed By: @int3, @elgenie

Differential Revision: D1662701

Signature: t1:1662701:1415253151:71fafd8e490a6b014753b9e2c7e7b90ead74c20d
Fix exhaustiveness checks on first-class enum switch

Summary: We need to expand thru tyvars and check across unresolved here.

Reviewed By: @int3, @elgenie

Differential Revision: D1661633

Signature: t1:1661633:1415253666:32eb74f02129508f9e4a07c59b701c8e454c5c8a
Fix mis-parsing of '{$' constructions in String2

Summary: During string interpolation, just `$foo` is a special beast --
notably `"$foo->x()"` is a //member// lookup on `$foo` followed by two
literal parens. That's why we have `encapsed_expr`. But, if it's
surrounded by curlies, then it is in fact a real expression again, and
we should use the full expression parser on it.

The new test cases show the three variations here, by way of errors: one
is a failed member lookup, one a failed function call, and one just
doesn't parse at all.

Fixes https://github.com/facebook/hhvm/issues/2972
Fixes https://github.com/facebook/hhvm/issues/3669

Reviewed By: @elgenie

Differential Revision: D1662433

Signature: t1:1662433:1415287920:d226bfd8f0c4b22130592ec9a15291f311c561dc