Remove abstract class and use Interface+Trait

| Q             | A
| ------------- | ---
| Bug fix?      | no
| New feature?  | no
| BC breaks?    | yes
| Deprecations? | yes
| Tests pass?   | yes
| Fixed tickets | -
| License       | MIT
| Doc PR        | -

Why do we need to close the inheritance if we can use our existing interface/trait? This PR will provide trait+interface instead of abstract class, that will allow to improve inheritance and allow to the class to extends another with real advantage if it needed.
A solution to implement this feature in 2.7, will be to dupplicate each child class ("SessionController", "ProfilerController", etc...) in a *trait version* ("SessionTraitedController", "ProfilerTraitedController", etc...) and to deprecate *child class* in favor of *trait class*

There, the developpers could migrate theire code, in version 2.7 and we would be able to remove the old classes in version 3