Use real cloning in ChangeOpAliasesTest

Clone doesn't really (deep) clone. This wasn't a problem in older
versions of the data model but is in current versions. Common
workaround is to serialize + unserialize. Which I find horrible in
production but ok in tests.

This is split from my patch I7434d5c.

Change-Id: If576d7ccd61387a650a39fd6ce64549a9928fa52
Use deep cloning in ChangeOpLabel/Description/Aliases

The clone keyword in PHP doesn't really (deep) clone. But this is
really important in certain versions of the data model.

Plus a bunch of refactoring. I found this code hard to read and to
maintain.

This is a direct follow up to some (but not all) of the comments in
Ibb6ee84.

Change-Id: I7434d5c40cd601976e72f104ce5699e59fef184e
Merge "Use real cloning in ChangeOpAliasesTest"
Merge "Use deep cloning in ChangeOpLabel/Description/Aliases"