Generalize some stuff into a Model protocol
Require model property values to be Equatable
Lame documentation