The focus of this branch was actually the changes in
test_model.py: creating a safe
union() variant that does not mutate its arguments (unlike
unionof()) and verifying that it obeys the expected invariants.
However, this uncovered an inconsistency between the fact that unions of
SomeChar were allowed, while other forms of implicit conversions between
unicode are not. So I removed the former and turned all mixed-type comparisons between str and unicode into errors, which required a lot of mechanical-but-not-quite-automatable fixes in