We need at least three different code generators for
WebIDL types and arguments. When used in the FFI, they should
be mapped to external types and primitives. In API functions,
however, they should be mapped to types convenient for
users of the API. Same for return types, but there, the rules
about what is possible are different.