Enable diamond import of final methods via `use` chains
Summary:
This diff enables diamond inclusion of traits via `use` chains should be supported even if they define final methods. Eg. the code below should be accepted:
```
trait T {
final public function foo() : int { return 1; }
}
trait T1 { use T; }
trait T2 { use T; }
<<__EnableMethodTraitDiamond>>
class C {
use T1, T2;
}
```
The rationale is that `final` is a constraint about inheritance hierarchy. We thus still reject:
```
trait T {
final public function foo() : int { return 1; }
}
class D { use T; }
<<__EnableMethodTraitDiamond>>
class C extends D {
use T;
}
```
because this code reuses a final method via the class inheritance.
Reviewed By: Wilfred
Differential Revision:
D31857847
fbshipit-source-id:
0661d257e513a27bd5ac7070b8d6cd498d00f489