Currently, Template Haskell's treatment of strictness is not enough to
cover all possible combinations of unpackedness and strictness. In addition,
it isn't equipped to deal with new features (such as -XStrictData) which can
change a datatype's fields' strictness during compilation.
To address this, I replaced TH's Strict datatype with SourceUnpackedness
and SourceStrictness (which give the programmer a more complete toolkit to
configure a datatype field's strictness than just IsStrict, IsLazy, and
Unpack). I also added the ability to reify a constructor fields' strictness
post-compilation through the reifyConStrictness function.
Fixes Trac #10697.