Support declare var, declare function, declare class and declare module

So declare statements look like this:

    declare var x;
    declare var x: number;
    declare function foo(x: number): string;
    declare class A { foo(): number; static bar(): string; }
    declare module A { export function foo() {} }

They have no runtime effect, just let the typechecker know about external things.

Test plan: `npm test`, ran flow parser comparison suite, tried with jstransform strip out transform, ran the Facebook esprima tester