Wrapper class that indicates subtypes of X are discriminated by type D
using the supplied Codec[D].
For example, an implicit Discriminated value can be defined in the companion
of a sealed trait, along with implicit Discriminator values in each subtype
companion. Given such implicits, a codec for the trait can be automatically
derived using Codec[X].
type that can be discriminated by discriminator values of type D
value type that discriminates Y in context of X from other types
using discriminators of D for some type Y