The previous fix relied on finding and manipulating all dead code.
But we missed some; in particular code of the form:
(begin (error 'x) ...dead...)
So switch to a different strategy that tolerates untraversed
dead code.
This fills the corresponding entries in the cast table with a Dead-Code
type so that when the contract-generation pass calls the contract-def
thunk, it finds that in the table.
* call compute-constraints instead of sc->constraints in get-max-contract-kind
* test cast on an intersection type involving Rec
* remove memory limit on sandboxed-unsafe-ops test