Each state is associated with exactly one owning flow definition.
Specializations of this class capture all the configuration information
needed for a specific kind of state.
Subclasses should implement the doEnter method to execute the
processing that should occur when this state is entered, acting on its
configuration information. The ability to plugin custom state types that
execute different behaviour polymorphically is the classic GoF state pattern.
Why is this class abstract and not an interface? A specific design choice. It
is expected that specializations of this base class be "States" and not part
of some other inheritance hierarchy.
Equality: Two states are equal if they have the same id and are part of the same flow.