Type normalization only affects parameterized types (e.g. public class Foo<T extends Serializable>)
that are used in form of a raw type (e.g. Foo.class). During the process of type normalization, this raw type
(Foo.class is instance of Class<?>) is replaced by a canonical version of the type which in this case
would be the parameterized type of Foo<T extends Serializable>

Base type normalization means that only the base type, which is the input for hierarchy discovery, is normalized.
Other types discovered during hierarchy discovery are never normalized even if a raw form of a parameterized type
is discovered.

A user of this class should recognize whether base type normalization is required and set the normalize
parameter accordingly.

In the realm of CDI there is only a single use-case for base type normalization. That is resolving bean types of
a bean defined as a class (managed and session beans). Here, e.g. discovered Foo.class needs to be normalized as
the correct CDI bean type is Foo<T extends Serializable>, not Foo.class.

In other cases, the complete generic information of the base type is known and thus base type normalization should
not be used so that it does not cover intentionally declared raw types (e.g. an injection point with a raw type should
be recognized as an injection point with a raw type, not it's canonical version).
This covers: