Better semantics for 'impossible'

Now only accepts a case is impossible if the unification error is
between two types in the same family (i.e. the impossible constructor
is in the correct family).