Fix a conversions to conform to erlang spec

These are some corner cases in converting numbers,
binaries and unicode.
Add enif_dlopen and enif_dlsym
Add enif_system_info implementation
Implement enif_inspect_iolist_as_binary
Simplify enif_env cleanup

Now we simply have one "list of dtor items"
in an env.  When the env is released, we iterate
through the door items, call the virtual method
release(ErlNifEnv*) and finally free the item
itself.
Fix but in enif_make_list

We were passing the wrong argument to EList.make
Implement enif_make_new_binary

It is important, that the char* coming out of this
is not shared across NIF calls, as the data will
really be committed to the corresponding EBinary
at the call boundary.  This is conformant to the
NIF spec.
Add enif_is_number