Check that case does not overspecialise

i.e. if we're inspecting a concrete constructor, make sure the intended
type is a constructor type. This stops typecase sneaking in, and
fixes #156
Disallow explicit types on LHS

To prevent typecase sneaking in.
Cache argument types for building case trees