`ForeignPtr` should be strict in `ForeignPtrContents`
Right now `ForeignPtr` is defined as
```haskell
data ForeignPtr a = ForeignPtr Addr# ForeignPtrContents
data ForeignPtrContents
= PlainForeignPtr !(IORef Finalizers)
| MallocPtr (MutableByteArray# RealWorld) !(IORef Finalizers)
| PlainPtr (MutableByteArray# RealWorld)
```
`ForeignPtrContents` is strict in all its fields, but `ForeignPtr` is lazy in the `ForeignPtrContents`. That should probably not be the case (or, if it should, we should document why).
issue