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