Added the abstract base class for implementations (issue #100)