Fix ugly bug with odicti.__setitem__

The previous version of __setitem__ called base.__setitem__ after
deleting the key from the base dictionary but without deleting it from
the case-storage dictionary which is used for __contains__ checks. It so
happens that OrderedDict.__setitem__ uses __contains__ checks which lead
to a terrible error.
Add comments about order in methods with side-effects

In methods with side-effects the order of calling methods of the base
class and modifying the internal state is extremely important.
Merge branch 'fix-setitem-bug'
Classify as Production/Stable

This is clearly not an alpha version anymore.

Of course, there may still be lots of undiscovered bugs. Especially,
when using new base types, lots of new bugs/issues are expected to be
seen.

The test coverage should be increased.