Reorganized by adding an abstract.py module for the abstract classes. More docstrings for the classes.