Allow typename in a template template parameter

Rationale

Since the introduction of alias templates, C++ has had type templates that
are not class templates, and in particular now has template template arguments
that are not class templates. However, the syntax for template template
parameters still requires the class keyword be used:

Note that typename is permitted for non-template
type-parameters, but not for template type-parameters.
This difference is artificial and is a common surprise. Removing it
would make the language simpler.

There is no semantic difference between class and typename in
a
template-parametertype-parameter-key.
typename followed by
an unqualified-id names a template type parameter.
typename followed by a qualified-id denotes the type
in a non-type [Footnote: …] parameter-declaration.
…
[Note: A template parameterargument may be a class
template or alias template. For example, …]

Change in 14.1 (temp.param) paragraph 3:

A type-parameter whose identifier does not follow an ellipsis
defines its identifier to be a typedef-name (if declared
with class or typenamewithout template) or
template-name (if declared with template) in the scope of the
template declaration. [Note: …]