Expand namespace "use" mappings even outside a namespace

The included test case would have its "use" dropped on the
floor since it applied outside of a namespace. Tweak the `elaborate_id`
function to always expand even outside a namespace, and remove a bunch
of special cases that tried to be too clever when outside a namespace.

Closes #2145

Reviewed By: @gabelevi

Differential Revision: D1240331
Be more restrictive about statements at toplevel in strict mode

We weren't checking for certain types of toplevel statements.
We also need to consume semicolons since occasionally people do `class C
{ ... };` which we should admit even in strict. Also we were failing to
consume the semicolon after typedefs.

Closes #2144

Reviewed By: @gabelevi

Differential Revision: D1239786
Private member visibility checking is super broken

Oy. This was really broken. www is going to need a little bit of
cleaning up too.

  * `parent::privateFun()` is not allowed
  * `static::privateFun()` is not allowed (children can override `privateFun`
    with a private function, leading to a runtime error
  * `TraitIUse::privateFun()` is not allowed (you need to do
    `self::privateFun()`)

Reviewed By: @jwatzman

Differential Revision: D1243231