Adding history base class. The base class contains the common
data and implementation among history types. The derived classes
extend the base class with implementation details.