typechecker: track hardcoded names in own module

Summary: As the number of functions/classes/constructs that the
 typechecker knows about grows, spraying hard-coded strings throughout
 the codebase is becoming rather unwieldy; additionally, there's no
 good way to leverage the ocaml compiler to find hardcode sites. To
 remedy this, Naming_special_names allows for a single place for magic
 strings for global functions, classes, and member/method names to be
 declared.

Reviewed By: @jwatzman

Differential Revision: D1616902
typechecker: allow enum values to be used in string concat

Summary: ... since we restrict enum values to be either ints or strings
 elsewhere in the typechecker and runtime.

Reviewed By: @jwatzman

Differential Revision: D1617014
support namespaces in hints in hack formatter

Summary: Depends on D1613311

Reviewed By: @elgenie, @jwatzman

Differential Revision: D1616085
make elaboration of namespaces during parsing optional

Summary: Depends on D1616085

Reviewed By: @jwatzman

Differential Revision: D1616159
use List.mem

Summary: Use List.mem instead of List.exists when checking for equality

Reviewed By: @int3

Differential Revision: D1619438