Only promote *non-existential* data constructors
I don't konw how this was left out before; Trac #7347. In fixing this I did the usual round of refactoring. In particular, I cached the fact that a DataCon can be promoted in the DataCon itself (the dcPromoted field).
Showing with 42 additions and 39 deletions