Infinite loop in the python picklecache _invalidate() method

While testing changes to make `zope.container` work with PyPy, I noticed that the `zope.container` tests would hang forever when aborting a transaction. It turns out that the picklecache `_invalidate` method failed to properly traverse the ring if objects were invalidated in a different order than the ring. This commit fixes that and adds a test for that scenario.