tests: Fix ThreadCall test case (left-over mistake from afcced48)
Make array descriptor types specific to the array's dtype

This adds the symbAddArrayDescriptorType() function which is used by
symbAddVar() and symbAddField() to create array descriptor types for each
array they create, replacing the symb.fbarray() table of pre-created
generic FBARRAY types.

This allows the array descriptors to be specialized to the array's dtype,
which is needed to get proper -g debug info (allowing the FBARRAY.data
pointer field to be inspected in gdb).

To avoid creating a new descriptor type for each array,
symbAddArrayDescriptorType() works similar to symbAddProcPtr() - an
internal unique id is created for the wanted descriptor type, encoding the
dimension count and array dtype. Then a lookup will be made - if such a
descriptor type already exists, it will be re-used; otherwise, a new one
will be created.

All array descriptors will also now be mangled using the
FBARRAY[1-8]<dtype> scheme. This is mostly needed for the encoding of
bydesc parameters when doing C++ mangling, but may also be useful for
debugging, at least to produce unique mangled names for each descriptor.

Also see: http://www.freebasic.net/forum/viewtopic.php?p=197301#p197301

- There are new FBSYMBOL.param.bydescrealsubtype and
  FBSYMBOL.var_.array.desctype fields used to track the exact descriptor
  type, often used where symb.fbarray() was used before

- There's no more symb.fbarray(), so globals like symb.fbarray_ptr are now
  simply calculated based on env.pointersize, no more cycling through the
  fields and doing symbGetOfs(). Due to this, env.pointersize is now used
  from with-in symbVarInit(), so it's now initialized from symbDataInit().

- symbCloneStruct() removed; symbCloneSymbol() is now just doing
  symbAddArrayDescriptorType() directly - only descriptor types are ever
  being cloned at the moment anyways.
STABS emitter: Overhaul emitting of array descriptor types

This fixes an extra typeAddrOf() that was done when emitting array
descriptor fields, but wasn't needed, and other than that, this just
simplifies how debug info for descriptor types is emitted, hopefully
without introducing regressions.

Most importantly, descriptor types are now emitted just like any other
UDTs, and there's only one HACK remaining to cause the descriptor's dimTB
to be emitted only as big as needed.

This also has the nice side-effect that the FBARRAY.dimTB will now actually
be emitted as an array of type FBARRAYDIM, not as a bunch of weirdly named
fields.