fix #5312

Previously, empty types (recursively defined as structs and tuples
that only contain other empty types) were all mapped to T_void, which
has no values. This caused problems for non-0-length "empty" tuples,
which are now represented as empty LLVM structs.

Part of this entails calling mark_julia_type with tuple types, which
then need to be GC rooted, so the typeToTypeId table is now an
ObjectIdDict.