Allocate code slabs dynamically to reduce Stalker memory usage

We can assume that `gum_alloc_n_pages()` only involves syscalls and thus
won't cause any issues with reentrancy.
Fix license header mixup
Add GumMetalHashTable data structure based on GHashTable

It's a copy of GHashTable modified to run on “bare metal”, which means
it doesn't wait for other user-mode threads after construction. So no
calls to malloc() or friends. This means it's suitable for use-cases
like the Stalker runtime.
Use GumMetalHashTable for keeping track of address mappings

The old implementation was buggy as some values were inserted never to be
found, resulting in lots of redundant compilation work and an ever-
growing cache. This approach eliminates that issue, handles dynamic growth,
and improves performance.