[Validator] Fixed group handling in composite constraints

| Q             | A
| ------------- | ---
| Bug fix?      | no
| New feature?  | yes
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | #4453
| License       | MIT
| Doc PR        | -

With this PR, it finally becomes possible to set the groups of nested constraints in All and Collection:

```php
/**
 * @Assert\Collection({
 *     "foo" = @Assert\NotNull(groups = "Strict"),
 *     "bar" = @Assert\NotBlank(groups = "Regular"),
 * })
 */
private $attr;
```

The group logic is implemented as described in [this comment](https://github.com/symfony/symfony/pull/4453#issuecomment-16513727).

This PR supports the implementation of #9888 which should now become fairly simple.
Because we need a way to determine whether the `$groups` property was set (in that case it's not overridden by Composite constraints) or not (in that case the Composite constraint sets it). The alternative would be to store something like `$userOptions`, but that was even uglier:

* If we store `$userOptions` in the serialized form of the constraints, the size of the serialized data grows unnecessarily.
* If we don't, then the condition `$constraint == unserialize(serialize($constraint))` doesn't hold anymore, which breaks many tests.

So I went with this solution.