Fix unsafe optimization of funs

Commits 53bd4974a101 and 726f6e4c7afe simplified the handling of
match_fail (used to generated exceptions such as 'function_clause')
by first rewriting them to a call to erlang/error{1,2} and later
rewriting them to specialized BEAM instructions (to reduce the
code size).

There was one flaw, though, which only was exposed when more
aggressive optimizations were added in c3b60f86c622. Here is an
example to explain it:

t(V) ->
    fun(get) -> V end.

The following BEAM code will be initially generated for the fun:

{function, '-t/1-fun-0-', 2, 5}.
  {label,1}.
    {line,[{location,"t.erl",5}]}.
    {func_info,{atom,t},{atom,'-t/1-fun-0-'},2}.
  {label,2}.
    {test,is_eq_exact,{f,2},[{x,0},{atom,get}]}.
    {move,{x,1},{x,0}}.
    return.
  {label,2}.
    {test_heap,2,1}.
    {put_list,{x,0},nil,{x,1}}.
    {move,{atom,function_clause},{x,0}}.
    {line,[{location,"t.erl",5}]}.
    {call_ext_only,2,{extfunc,erlang,error,2}}.

Translating back to Erlang code, that would be roughly:

'-t/1-fun-0-'(get, V) -> V;
'-t/1-fun-0-'(Arg1, _) -> erlang:error(function_clause, [Arg1]).

Note that the second argument (the free variable V) is not included
in the call to erlang:error/2.

The beam_except pass will simplify the code to:

{function, '-t/1-fun-0-', 2, 8}.
  {label,1}.
    {line,[{location,"t.erl",5}]}.
    {func_info,{atom,t},{atom,'-t/1-fun-0-'},2}.
  {label,2}.
    {test,is_eq_exact,{f,1},[{x,0},{atom,get}]}.
    {move,{x,1},{x,0}}.
    return.

The code has been shortened by jumping to the func_info/3 instruction.
Translating back to Erlang:

'-t/1-fun-0-'(get, V) -> V;
'-t/1-fun-0-'(Arg1, Arg2) -> erlang:error(function_clause, [Arg1,Arg2]).

it is clear that both arguments are now included in the
'function_clause' exception, even though the initially generated
code only included the first argument.

That is no problem in this particular case, but for some more complex
funs, optimizing the first version based on variable usage could make
the second version unsafe.

I rejected the following potential solutions:

- Including the free arguments in the call to erlang:error/2:

'-t/1-fun-0-'(get, V) -> V;
'-t/1-fun-0-'(Arg1, Arg2) -> erlang:error(function_clause, [Arg1,Arg2]).

Unfortunately, that is tricky. The free variables are only known
after the second pass in v3_kernel when variable usage has been
calculated. We would need to add a third pass (only for funs) that
would the free arguments to the second argument for erlang:error/2
*and* update the variable usage information.

- Calling beam_except earlier, from within beam_block before any
  optimizations based on variable usages are done.  But means that the
  problem could reappear in some other form in the future when other
  updates are done to the code generator and/or optimization passes.

The solution I have chosen is to modify beam_except to only replace
a call to erlang:error(function_class, Args) if the length of Args
is the same as the arity in the func_info/3 instruction. The code
will be slightly larger. Also, the free variables for funs and list
comprehensions will no longer be included in the function_clause
exception (that could be less confusing, but it also means less
information during debugging).
erl_eval: Don't allow evaluation of {M,F} in the shell

Tuples funs were removed in de7e01c958ff7c9e6da4034a53567a30a4ae5792,
but it was still possible to evaluate tuple funs in the shell.
Merge branch 'bjorn/compiler/beam_utils-crash/OTP-10825'

* bjorn/compiler/beam_utils-crash/OTP-10825:
  Fix unsafe optimization of funs
Merge branch 'bjorn/remove-tuple-funs/OTP-10170'

* bjorn/remove-tuple-funs/OTP-10170:
  erl_eval: Don't allow evaluation of {M,F} in the shell
Update primary bootstrap
Clean up of documentation of type language

Prompted by noticing that the type language description was a bit vague
in its explanation of the syntax and semantics of bitstring types,
I decided to add this information.  While at it, a general clean up and
rephrasing was performed.  The binary() type is now described as an alias,
as it should be, and a bitstring() type is also described as a built-in
alias.
Add support for printing <<_:_*1>> as bitstring()
Merge branch 'dg/win_icon' into master-pu
Merge branch 'sk/odbc64' into master-pu
Merge branch 'sal/ftp' into master-pu
Merge branch 'as/tls-psk-srp-suites' into master-pu
Merge branch 'rc/break-out-asserts' into master-pu
Merge branch 'pad/enif_phash2' into master-pu
Merge branch 'mh/fix-emacs-pkg-flymake-dep' into master-pu
Merge branch 'ks/type-doc-cleanup' into master-pu