Use clang's -Wimplicit-fallthrough and fallthrough attribute on case statements

We can avoid accidental fallthroughs using clang's -Wimplicit-fallthrough.

https://clang.llvm.org/docs/AttributeReference.html#fallthrough