[COREVM-89] Make native type pool to use object_container

Currently the native type pool uses an associative map to store native type handles. However, it currently uses the default allocator that allocates memory directly from the operating system. This patch makes it so that it uses `corevm::memory::object_container` and supplies it with a custom allocator.
Handle invalid keys, can catch `corevm::memory::invalid_address_error`, and throw `corevm::runtime::native_type_handle_deletion_error()`.