Be more conservative about HNI types when there are InterceptableFunctions

Summary: Since the list of interceptable functions is user supplied it really
makes sense that we should not have to change systemlib files based on it.

Reviewed By: @bertmaher

Differential Revision: D1534975
typechecker: change error reporting location for emacs/vim

Summary: ... instead of creating a ragged edge by adding the error
 code at the beginning of the primary error location, instead
 add it to the end of the line.

== before: ragged left edge ==

   File "DynamicYield_call1.php", line 22, characters 23-28:
   Typing[4053] The method getBar is undefined in an object of type Foo
   File "DynamicYield_call1.php", line 22, characters 15-17:
   Check this out

   [next error]

== after: no ragged edge ==

   File "DynamicYield_call1.php", line 22, characters 23-28:
   The method getBar is undefined in an object of type Foo (Typing[4053])
   File "DynamicYield_call1.php", line 22, characters 15-17:
   Check this out

   [next error]

Reviewed By: @pikatchu

Differential Revision: D1537058
typechecker: report error codes for hh_client / json (1/2)

Summary: ... when no --from argument is supplied, the error printing
 goes down a different path. After this diff, that path includes the
 error code at the end of the line for the primary error. So:

  <file>:54,56: Invalid argument (Typing[4110])

 The json output also gains a "code" field.

Reviewed By: @jwatzman

Differential Revision: D1537048
Keep track and set a limit on the number of cloned closures

Summary: We've had problems in the past caused by this code, and we're again
seeing OOM crashes while cloning closures.  This diff adds
instrumentation to keep track of how many cloned closures are created,
and asserts that it doesn't go past a limit provided by a runtime
option.

Reviewed By: @mclarkelauer

Differential Revision: D1531645