Opaque types represent types that need to be preserved through optimization, but
otherwise are not introspectable by target-independent optimizations. This patch
doesn't add any uses of these opaque types by an existing backends, it only
provides basic infrastructure such that these types would work correctly.