add get all groups

No, it'll continue from where the cursor item would have been. The `dropwhile()` will stop dropping items as soon as it sees the first item with a key greater than the cursor value.

This means you can invent your own cursor values and have them kind-of-work, but I think that's better than returning an error for a previously-valid cursor just because an object has been deleted. (Consider the case where the client is walking the list in order to delete certain groups, for example.)