typechecker: keep track of type params for require extends X<T1, T2, ...>
Summary: ... these were previously being thrown away and replaced with the
type params of the containing trait and interface, usually working
simply because the typechecker is (too) tolerant of classes without
bound type params. The code for this is somewhat involved and
complicated by the fact that a require extends Foo<T1, T2> requires
the type variables T1 and T2 to be substituted juuuuust right in
each place they're used.
Reviewed By: @jwatzman
Differential Revision: D1410558