Extends abstract functionality

Abstract classes can now list abstract methods that should be
implemented by inheriting classes. All methods must be implemented
unless the child class is also declared abstract in which case the next
child class must implement all abstract methods in both parents.