More work on storing `SILDifferentiabilityWitness *` in `DifferentiabilityWitnessFunctionInst`
1. DenseMapInfo for LinkEntity was incorrect, causing failures.
2. SILDifferentiabilityWitness are getting deserialized into the
compiled module and then emitted into the IR. This is bad because the
witnesses refer to things that are not visible in the current module,
producing errors. The proper fix is to not deserialize
SILDifferentiabilityWitnesses.
Fixed (1) by writing a correct (but currently hacky) DenseMapInfo.
Patched over (2) by:
A. Not serializing hidden/private SILDifferentiabilityWitnesses.
B. Setting linkage for public SILDifferentiabilityWitnesses to
"external" upon deserialization, which causes the linker to be okay with
the fact that there are duplicate symbols.