[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        | TODO

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.
We are returning here as soon as we get a granted attribute. This will mean that any further attributes for this vote will be ignored. This could be an issue, if, for example, you have `is_granted( ['VIEW', 'DELETE'], $obj)` and the user has view permissions, but not delete permissions, as it will grant permission for both attributes.

May be better to negate the if and return as soon as a denied is returned.