Disable copy-on-write by making all array functions always copy

Currently has issues
Remove more instances of hasMultipleRefs
Remove usages of hasExactlyOneRef

Currently untested
Fix failing array_plus_eq test
Fix curl_copy_handle tests.

I'm not really sure how they were passing in the first place, and
what I did to make them fail.
Allow arrays to not be copied when adding a new key.

Fixes failing serialisation tests
Fix invalid array copy sometimes breaking array_multisort
Initial work on a tracing garbage collector
Further attempts to trace the heap
Appear to be successfully tracing the heap
Cleaned up tracing
Change MarkSweepCollector to a thread-local singleton
Start to add new block-based memory management API
More work on block allocator
Block allocator working successfully.

Tests appear to mostly be working
Attempt to remember objects which have destructors
Cleanup of previous commit
Align GC-enabled slabs to a known value

This will make garbage collection easier, as we can
quickly tell what block an address belongs to
Add check to fix segfault in tracing-collector.

Not sure what was causing it at this stage.
Tracing collector marks which blocks are in use.

Next step is to be able to figure out what blocks have been used,
but are now garbage. We can then return them to the allocation
queue.