[OptionsResolver] Validate options before normalization

| Q             | A
| ------------- | ---
| Bug fix?      | yes
| New feature?  | no
| BC breaks?    | yes
| Deprecations? | yes
| Tests pass?   | yes
| Fixed tickets | #4500, #9174, #10585, #10202, #11020, makes #7979+#10616 obsolete
| License       | MIT
| Doc PR        | symfony/symfony-docs#4159

**Description not up to date at the moment**.

Partially reverts #11716.

Previously, the options weren't validated before the normalizers were called. As a result, the normalizers had to perform validation again:

```php
$resolver->setAllowedTypes(array(
    'choices' => 'array',
));
$resolver->setNormalizers(array(
    'choices' => function (Options $options, $value) {
         array_merge($options['choices'], ...);
    },
));

// fatal error
$resolver->resolve(array('choices' => 'foobar'));
```

This is fixed now.

After the fix, the `Options` class turned out to be doing everything that `OptionsConfig`/`OptionsResolver` were responsible for previously. Therefore I removed `OptionsConfig` again (introduced in 2.6).

```php
$options = new Options();
$options->setDefault('choices', array());
$options->setDefault('class', null);
$options->setRequired('em');
$options->setAllowedTypes('choices', 'array');
$options->setNormalizer('choices', function ($options, $value) {
     array_merge($options['choices'], ...);
});

$resolvedOptions = $options->resolve($passedOptions);

// Form component example (3.0)
public function setDefaultOptions(Options $options) {
    $options->setDefaults(array(
        'choices' => array(),
        'class' => null,
    ));
    $options->setRequired('em');
    $options->setAllowedTypes('choices', 'array');
    $options->setNormalizer('choices', function ($options, $value) {
         array_merge($options['choices'], ...);
    });
}
```

**BC Breaks**

When using OptionsResolver, instances of the Options class were only exposed to the user within lazy option/normalizer closures. The Iterator interface and the `all()` method did not work there, since they resulted in cyclic dependency exceptions. Thus I removed both.

I also made the `get()` method stricter to be *only* usable within those closures. Before, `get()` was practically only used in those closures, but could theoretically be also accessed outside of that closure. The benefit of this change is that we can implement nested options quite easily in 2.7+.

Both breaks may require people who used the Options class independent of OptionsResolver to adapt their code. However, I don't think there's many (if any) people who did that.

Apart from that, normalizers are not called anymore for undefined options (#9174). Otherwise we'd have consistency problems: What to do for an option with validation rules and a normalizer if it is not passed? Such an option could not be validated before calling the normalizer.

**Deprecations**

OptionsResolver and OptionsResolverInterface were deprecated and will be removed in 3.0. The Options class is now sufficient to configure and resolve options.

The `Options::overload()` method was also deprecated, since its functionality was merged into `set()`.

**Todo**

- [x] Fix PHPDoc
- [x] Adapt CHANGELOG/UPGRADE
- [x] Adapt documentation
- [x] Deprecate OptionsResolver[Interface]
What for? Constants are part of the API and this should not be exposed.