The scratch allocator could erroneously return a slice
overlapping previously allocated memory for allocation
requests that were smaller than the arena size, but larger
than the amount of free space left in the arena.
- fix the check in mem::scratch_alloc_bytes_non_zeroed
that wasn't routing the request to the backup allocator.
- added concrete reproduction test under tests/issues.