Add type parameters to linearization
Summary:
This diff adds type parameters to the list of things linearization stores. Each type parameterization of a class is a separate class when it comes to linearization. Consider the example test:
```
<?hh
interface Ico<+T> {}
interface I2 extends Ico<mixed> {}
interface I3 extends I2, Ico<num> {}
interface I4 extends I3, Ico<int> {}
```
this becomes:
```
L(I4) = I4 + L(I3) + L(Ico<int>)
= I4 + [I3 + L(I2) + L(Ico<num>)] + Ico<int>
= I4 + I3 + [I2 + L(Ico<mixed>)] + Ico<num> + Ico<int>
= I4 + I3 + I2 + Ico<mixed> + Ico<num> + Ico<int>
= [I4, I3, I2, Ico<mixed>, Ico<num>, Ico<int>]
```
which is correct according to our current behavior.
If you instead switch Ico<int> and I3, you get a completely different linearization.
Reviewed By: vassilmladenov
Differential Revision:
D9757934
fbshipit-source-id:
bad330eecd4117e459f28ddb57f01edf45453a2c