See http://stackoverflow.com/questions/1898932/case-classes-vs-enumerations-in-scala