Added an abstract base class that enforces the interface through one of its methods using the 'Curiously recurring template pattern.' Modified Makefile to make clang give more warnings.