Actually the "Propagator" is based on well-known "Observer" design pattern
in which an object known as the Subject holds a list of Observers and notifies them automatically of any state changes.
- IPropagator interface contains methods for adding/removing dependent objects and processing state changes.
- Propagator class, implements the IPropagator interface and contains
the "AddHandler" method used for managing a list of delegates to be invoked when a change takes place.
- StateChange class represents the change itself.
- StateChangeOptions enum allows specifying a change propagation options.