Some minor repairs to conLang

The equality semantics doesn't match do_eq_i1 any more.

When comparing two constructor values for equality, the source does
this:

do_eq (Conv cn1 vs1) (Conv cn2 vs2) =
  if cn1 = cn2 && (List.length vs1 = List.length vs2) then
    do_eq_list vs1 vs2
  else
    Eq_val false

modLang does this:

do_eq_i1 (Conv_i1 cn1 vs1) (Conv_i1 cn2 vs2) =
  if cn1 = cn2 && (List.length vs1 = List.length vs2) then
    do_eq_list_i1 vs1 vs2
  else
    Eq_val false

conLang does this:

do_eq_i2 (Conv_i2 tag1 vs1) (Conv_i2 tag2 vs2) =
  if snd tag1 = snd tag2 then
    if fst tag1 = fst tag2 && (List.length vs1 = List.length vs2) then
      do_eq_list_i2 vs1 vs2
    else Eq_val false
  else Eq_type_error

exhLang does this:

do_eq_exh (Conv_exh tag1 vs1) (Conv_exh tag2 vs2) =
  if tag1 = tag2 && (List.length vs1 = List.length vs2) then
    do_eq_list_exh vs1 vs2
  else
    Eq_val false

patLang and intLang follow exhLang.

So if you have two constructors of different types compared for
equality, then conLang raises a type error, but none of the other
languages do. This is a problem because it prevents us from going from
verifying the translation from modLang to conLang. We could repair it by
having conLang's eq ignore the type argument. However, the proper thing
to do would be to improve the semantics and modLang equality to check
that the values are from the same type and get stuck otherwise (just as
pmatch does). It would also be nice to have the length check raise a
type error when it fails, to avoid having to check the lengths at
runtime, but I don't think that will work unless equal tags are known to
be from the same type. So the choice is to either remove the check from
do_e1_i2, which should work for now, or to improve the semantics (and
repair the type soundness proof) which will allow us to make some
optimisations later on.