Cleanup haas.model

- ForeignKey references references are now to id, rather than label.
- Moved the id and label fields to a superclass
- Moved the __repr__ method to a superclass. We don't need the detail in
  the previous version, and it was hard to test (coverage tool was
  perfectly happy with the if expression that was in many of the
  individual methods we had before).