New method for defining clusters
The current Cluster type is somewhat cryptic/cumbersome due to the long list
of generic parameters. Additionally, we lose type information for any fields
that aren't covered by the generic parameters.
The most immediate need for ongoing device work is access to the cluster name
in the cluster type.
Rather than add yet another generic parameter, this commit rewrites cluster
factory with alternate cluster types that preserve all information from the
cluster down to the element level.
The new types do not require a long list of generic parameters. This works
using the new "const generic parameter" that's available now that we're on TS5.
We could conceivably migrate all existing references to Cluster<> to this new
approach but to keep things wieldly this commit only uses the new types for
defining clusters. That unblocks the device API without inflicting changes
that are too massive.
Includes new generated clusters. Also fixes a couple of places where the old
definitions seem to have been too permissive.