Assign private linkage to non-global functions
Name all runtime types; assign linkonce linkage

The linkonce linkage ensures that multiple runtime
type globals with the same name are collapsed to
the same one when linking. This is important to
type identity. We assign linkonce to all unnamed
types.

Named types and pointer-to-named types are given
common linkage when the named type is external,
or default ("external") linkage when internal to
the package being compiled. This ensures one global
for named types, minimising the cost of computing
the runtime types.
Return an error if type-checking fails
Fix sign-extended int conversions; fix bytes.Compare