Modernize SymbolSuite

- Use brackets when referring to function names

- Merge similar tests using assertion macros
Allow for inline symbols up to 20 bytes

This reduces the "byteLength" field to 16bits and removes the
"charLength" field entirely for inline symbols. This allows enough space
for 20 byte inline symbols. This has two major disadvantages:

1) Symbols generated by the codegen and runtime are now limited to
   64KiB. Symbols used entirely by the frontend that are never emitted
   as generated code are stil unbounded. This requires additional checks
   in the compiler and runtime to avoid creating "oversized" symbols

2) When converting an inline symbol to a string (i.e. via
   symbol->string) the character count of the string needs to be
   recalulated

However, in a test of the symbol encountered in our functional tests
this reduces the number of heap symbols by over 90%. This reduces
generated code size, runtime memory usage and atomic operations to deal
with shared byte arrays.

The majority of this change is in additional tests to cover new code
paths - for example, converting between heap strings and inline symbols
and creating oversized symbols.
compiler: Plan (string->symbol), (symbol-string)

This adds static planning for symbol <=> string conversion when applied
to constant data. This is intended to partially mitigate the recent
symbol changes which made the conversions more expensive.
stdlib: Fix missing guards for global constants

(bytevector-copy!), (vector-copy!), (string-copy!) and
(read-bytevector!) were not checking if their destination arguments were
global constants. This results in undefined behaviour (usually
crashing).
stdlib: Fix wrong procedure name in errors

(floor-quotient) and (floor-remainder) had their error message copied
and pasted from their truncate- equivalents
compiler: Optimise same length symbol unions

If all the symbols in the union have the same length we don't need to
load the symbol's length field. Theoretically LLVM could optimise the
load and compare as we're passing in range metadata containing only one
possible value. In practice LLVM 3.5 seems to not notice this.