attempt to more closely follow the Reference's
"Error Message Conventions" in the contract error messages
add #:pre/desc to ->*
add #:pre/desc and #:post/desc to ->i
Fix make_discarding_first_sequence

Ensure that the first expression is single valued.
Remove dead code after error in begin forms

Reduce (begin x (error 'e) y) ==> (begin x (error 'e))
Remove dead code after error in begin0 forms

Reduce (begin0 x (error 'e) y) ==> (begin x (error 'e))
Remove dead code after error in if forms

Reduce (if (error 'e) x y) ==> (error 'e)

Take care of the type information and clocks when only
one branch produce an error.
More module tests (*)
Remove dead code after error in with-continuation-marks forms

Reduce (with-continuation-marks (error 'e) x y) ==> (error 'e)
and (with-continuation-marks x (error 'e) y) ==> (begin x (error 'e))
Remove dead code after error in set! forms

Reduce (set! x (error 'e)) ==> (error 'e)
Remove dead code after error in #%apply-values forms

Reduce (#%apply-values (error 'e) x) ==> (error 'e)
and (#%apply-values x (error 'e)) ==> (begin x (error 'e))

(I can't test this directly.)
Remove dead code after error in unary applications

Reduce ((error 'e) x) ==> (error 'e)
and (f (error 'e)) ==> (begin f (error 'e))
Remove dead code after error in binary applications

Reduce ((error 'e) x y) ==> (error 'e)
(f (error 'e) y ) ==> (begin f (error 'e))
and (f x (error 'e)) ==> (begin f x (error 'e))
Remove dead code after error in n-ary applications

Reduce ((error 'e) x y z) ==> (error 'e) ...