Remove default: cases from switches on enums

And make it so that the types in the cases always match the type being switched
on, so that the compiler can provide more useful warnings.

@alazier 
Also, are you really not getting a warning from the compiler now? I would be worried if that is the cas.e