Introducing polymorphic enums

So you can define behaviour for each enum value.

If it is ok, I'll write some docs for it =)