Support ES6 class syntax and improved object literals

Adds support for the following syntaxes:
 * `{foo, bar}` outside of destructuring
 * `{foo() { return 42; }` methods
 * `/.../uy` regex flags
 * `{['foo' + 'bar']: 42}` computed property names
 * `class Foo extends Bar { ... }` class definitions
Also adds externs for the new ES6 global constructors.

I'm not very familiar with github pull requests - I've broken up each feature into separate commits, but they're still bundled together since several are interdependent.  I can send them all as separate pull requests if you want, but many will have to go serially which could take a while.  I haven't personally signed the contributor agreement - my understanding is that Google's corporate agreement should cover me, but if I need to sign one myself I can do so.