erts: Fix valgrind warning for re_SUITE:error_handling

by making sure we at least can read the first four bytes
of a compiled regexp where the 'magic_number' is located.
erts: Fix compiler warning
erts: Refactor remove erts_sys_dll_open2
erts: Add 'extra' argument to erts_convert_filename_to_encoding
erts: Support loading of drivers with unicode paths
crypto: Fix memory leaks and invalid deallocations

in mod_pow, mod_exp and generate_key(srp,...)
Eliminate bottlenecks in sys_core_fold

Compiling programs with very many uses of the "dot notation"
for extracting a record element could be very slow. The reason
is that each extraction of a record element (R#r.a) would first be
transformed to code like this:

   case R of
     {r,rec0,_,_} -> rec0;
      _ -> error({badrecord,r})
   end

In Core Erlang, each '_' would be become a new variable. The
resulting code would be optimized by sys_core_fold, but the
optimization process could be very slow.

Profiling shows that sub_del_var/2 was the worst bottleneck, and the
sub_is_val/2 the second worst bottleneck. In both cases, the culprit
is the linear traversal of a very long list (the list of variable
substitutions). Fortunately, there already is a gb_set (the scope)
which contains all variables that are currently live. If a variable is
not known to be live, it is no point in doing the linear operation on
the list.
Add misc internal documentation
erts: Add internal docs for code loading and tracing