runtime: Check for valid garbage state on collect

This will hopefully catch certain types of memory corruption earlier
compiler: Fix GC crash with mutables on -O 0

The planner was incorrectly marking the record data temp of newly
initialized mutable as GC managed and then neglecting to dispose of the
value. The dispose was automatically added with optimization on but on
-O 0 the temp would linger and cause a crash on the next GC entry.

This has no matching unit test because unit test are always run with -O
2 currently
codegen: Fix constant symbols of exactly 12 bytes

Since the shared byte array changes the runtime thinks 12 bytes is the
symbol inline threshold while codegen was still using 11 bytes. This
means that the runtime would use the pointer address of 12 byte symbols
as the symbol's UTF-8 data.

Make codegen use the correct 12 byte limit and add a unit test for 12
byte symbols and strings.