evaluate assignments inside function calls left-to-right. fixes #4990

also, allow assignments inside tuples at parse time, but not after
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.
insert StoredArray and DenseArray types between AbstractArray and Array

ref #987, #2345

this seems to be the less-controversial core of what we need.
this commit just adds the types and doesn't do anything else with them yet.
allow an expression as the optional message in `assert`. fixes #5267