[Security] add an AbstractVoter implementation

| Q             | A
| ------------- | ---
| Bug fix?      | no
| New feature?  | yes
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| License       | MIT
| Doc PR        | https://github.com/symfony/symfony-docs/pull/4257

The idea is to reduce boilerplate required to create custom Voter, doing most of the work for the developer and guiding him on the path by providing simple requirements via abstract methods that will be called by the AbstractVoter.

P.S. This is meant to be a [DX Initiative](https://github.com/symfony/symfony/issues?labels=DX&state=open) improvement.
Why returning `ACCESS_ABSTAIN` so early? This avoids using `is_granted(MY_ATTRIBUTE)` without passing object.

Take the role checking as example: `is_granted('ROLE_ADMIN')` ... no object is passed. Ans this kind of implementation is not possible here.

At first glance, I would do something like `if(!!$object && !$this->supportsClass(...)`