During enum construction, assert that all members are the same concrete type.

Having differing RichEnumValue subclasses used in the same RichEnum has proven
to be the source of many subtle bugs.