Enforce modularity boundaries for top level functions and various function pointers
Summary:
This diff adds module level boundary enforcement for
* Calling top level function
* with its name: `foo()`
* dynamically: `$f = "foo"; $f();`
* Creating function pointers via
* `foo<>`
* `foo::bar<>`
* closures
* clsmeth
* methcaller
Note that for function pointers the error happens when they are created, not when they are invoked.
Reviewed By: edwinsmith
Differential Revision:
D36597564
fbshipit-source-id:
ba507040d95c6080bdc680a92c6c1a375b859b68