Templates as a concept

Also thinking about how liskov substitution can be test so I can safely
create class hierarchies