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.
Merge pull request #22 from rbm/assert-same-types

Assert that all members of a RichEnum are the same concrete type
Membership tests without cross-type comparisons