use alpha not char for tradition's sake
rework array and string naming

Strings are now installed as genvars with array<alpha>[len] types.
Arrays are now named as "array<alpha>[len]" in the symbol table.
These two changes are the stepping stones to allowing for assignments
between symbols constituting arrays of equal length. Note that this
behavior as with assigment between record types is only supported by the
expression type checker, not yet by the code generator.
Similar renaming fix for records

Records will now be deterministicly named as a function of their
members. For instance record a, b, c : integer; will now generate the
base name "record{integer,integer,integer}". This makes assignments
between anonymous types pontentially meaningful as the deterministic and
repeatable naming scheme will ensure equal types for equal structs.

This may cause issues with anon vs. named types, as a named record will
create a ThinType wrapper over its basic (and now repeatably named)
RecordType, meaning that (typeof "foo") for foo some named type symbol
will recur through the ThinType and yield the type of the wrapped
type which will be equal to the type of an anonyously defined record
type.

The fix is probably to have the ThinType recursive (typeof) append a
"wrapped_" to the yielded name, or eliminate the ThinType in this
specific case and have named record types install themselves as full
record types without a ThinType wrapper. The latter is arguably better.
tiny cleanups
Merge branch 'develop' into fixup/type-naming
significant test correctness patches
patch for pasrec.pas