Cleaning up and splitting subheap creation helpers and free block merge logic.
Should be the last refactoring needed before LFH specific changes, as implemented in https://gitlab.winehq.org/wine/wine/-/merge_requests/1628.
-- v2: ntdll: Keep subheap parent heap pointer and check for mismatches. ntdll: Move the insertion of the first block out of create_subheap. ntdll: Split create_free_block into block_init_free / insert_free_block. ntdll: Merge prev and next free heap blocks in heap_free_block. ntdll: Split heap blocks before creating or resizing used block. ntdll: Clear BLOCK_FLAG_PREV_FREE flag out of shrink_used_block. ntdll: Move heap allocation and initialization into RtlCreateHeap. ntdll: Split heap region memory allocation to allocate_region helper.