[model] Implemented the toString method in all change descriptor classes
[model] Implemented the toString method in all identifier classes
[RuleEditor] Tidied up some of the experimental change descriptor code

The next step, I think, will be to modify ReactionRule (and the saving and
loading processes) to use change descriptors
[Layoutable] Added the clear method to ChangeDescriptorGroup
[Layoutable] Added some ChangeGroup-like methods to ChangeDescriptorGroup

Note that the new remove(IChangeDescriptor) method is highly unlikely to
work properly until I implement equals(Object) for the change descriptor
classes
[Link] Removed the abstract modifier from the Link.Identifier class

The reaction rule file format needs to be able to identify Links without
caring whether they're Edges or OuterNames
[ExtendedDataUtilities] Added some methods for creating change descriptors
[model] Added accessors to all the change descriptor classes

Not all of the properties are exposed at the moment -- just those required
by the reaction rule saving process
[ReactionRule] Use a ChangeDescriptorGroup rather than a ChangeGroup to
track reactum changes

The reaction rule editor is slightly broken by this commit, but it can
still actually load and save reaction rules, which is a nice surprise
[Container] Removed an unnecessary field from ChangeAddChildDescriptor

The new child's name was being kept in a separate field, which was
pointless -- the identifier now stores this information
[Control] Added an identifier class

Node.Identifiers reference Controls directly, which makes them
unnecessarily difficult to port; this new class will solve that problem
[Node] Made the Identifier use a Control.Identifier rather than a Control
[model] Implemented equals(Object) and hashCode() in the identifier classes

This commit also adds a few supporting utility methods to ModelObject
[Layoutable] Implemented equals(Object) and hashCode() in the change
descriptor classes

Updates to the change descriptor classes for Point and Container will
follow in a moment
[Container, Point] Implemented equals(Object) and hashCode() in the change
descriptor classes
[Layoutable] Added more ChangeGroup-like methods to ChangeDescriptorGroup

These are required by the mysterious Operation 2, which will shortly be
rewritten to operate on change descriptors
[RuleEditor] Fixed the execution and undoing of reactum changes

The reactum is now working really rather well indeed. Redex changes will
require some more work -- but, now that change descriptors exist and work
properly, I'll be able to finish implementing the mysterious Operation 2,
which will perform some of the necessary fixups
[ReactionRule] Ported the mysterious Operation 2 to use change descriptors

The code in RuleEditor that actually tried to apply Operation 2 is no
longer there, but it'll be back -- in a more useful form -- before long
[Link] Implemented equals(Object) and hashCode() in the Identifier class

Link comparison is slightly interesting: a Link.Identifier can be equal to
either an OuterName.Identifier or an Edge.Identifier
[RuleEditor] Restored some more of the functionality of the rule editor

Redex changes are now propagated to the reactum when no reactum changes
exist, and reactum changes can once more be added to -- and removed from --
the model