typechecker: adding hint support for PHP5.6-variadic args

Summary: The syntax ##f(A ...$a)## makes ##$a## an ##array<A>## for
 the purposes of the body of ##f##, but for callers of ##f##, it is a
 function that accepts any number of arguments, as long as each of
 those is an ##A##.

 To implement this syntax:
 - the param type information for the hint that accompanies the variadic
   is parsed and tracked; this includes all the places where func types are
   instantiated
 - the approach to getting types for the body vs signature of a function
   is now necessarily distinct (with a boolean param)
 - in order to check types in functions calls, the subtyping of params changes
   from stopping after one of the param lists is exhausted as previously now proceeds
   further using a default (containing the type calculated from the variadic hint)

 NOTE: HHVM runtime doesn't yet support the typehinted form of
 ##...$args## due to perf concerns with respect to when the typehint
 is to be checked.

Reviewed By: @jwatzman

Differential Revision: D1435333
more accurate signatures for fb_get_enum_* functions

Reviewed By: @jwatzman

Differential Revision: D1435555