Address pattern matcher exhaustiveness warning

By placing the sealed descendents in a module, rather
than in a trait.

This won't be binary compatible.

Review by @larsh