Change inheritance, force some implemention validation

Base classes now have "forced" implementations which define a set of
functions that all instances and sub-classes must define to perform
properly. Along with this, some base functions that can be driver-
agnostic have been moved to the base classes.