Attempts to fix circular dependency: observer pattern.

Introduce new super classes that will facilitate the mechanics of the observer
pattern. Notes in observer.py. Not yet working. [ci skip]