HPCC-12665 Use a list to maintain a list of heaplets that may have space

* Add a lockless singly linked list of heaplets that may potentially
  have any spare space.  This avoids walking all the heaplets when checking
  if any existing blocks have space, and when checking for heaplets to
  return to the global memory pool.

* Convert the list of heaplets for a heap from singly to doubly linked to
  optimize removal of empty heaplets.

Signed-off-by: Gavin Halliday <gavin.halliday@lexisnexis.com>