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.
@stof given this feature is introduce in version 3.0 we have to deprecate the removal of ContainerAware in version 3.0 which will be removed in version 4.0.

If you deprecate this class in 2.7 it will generate deprecated logs for everyone (who use ContainerAware or one of the 11 child class) without ways to remove it.