[enums] Refactor and clean up exhaustive check of switch cases functionality in statement.ml
[enums] Refactor and clean up exhaustive check of switch cases functionality in statement.ml

Summary:
First, move functionality to a separate function to clean up the code analyzing switch statements.

Second, refactor how we fold over the switch cases list. Rather than produce lists of valid and invalid cases, produce a either a `EnumExhaustiveCheckInvalid` or `EnumExhaustiveCheckPossiblyValid` directly. This makes the code more understandable, and allows us to skip the unnecessary work of creating valid cases once we've hit one invalid one.

Reviewed By: dsainati1

Differential Revision: D21259820

fbshipit-source-id: 6094c6e627c03be32177545bc617ba1b5dfeb4c6

mroch/flow,mroch/flow,mroch/flow,facebook/flow,facebook/flow,facebook/flow,mroch/flow,facebook/flow,facebook/flow,mroch/flow,mroch/flow,mroch/flow,facebook/flow,facebook/flow