Remove support for tuple funs

Tuple funs were deprecated in R15B (in commit a4029940e309518f5500).
Merge branch 'maint'

* maint:
  Revert "Merge branch 'nox/compile-column-numbers' into maint"
Merge branch 'maint'

* maint:
  compiler: Warn if the size of a binary segment is invalid
Merge branch 'maint'

* maint:
  Fix the erlc -MP flag
Merge branch 'maint'
Merge branch 'maint'

Conflicts:
	lib/diameter/autoconf/vxworks/sed.general
	xcomp/README.md
Merge tag 'OTP_R15B02'

The R15B02 release
v3_codegen: Don't duplicate the functionality of cg_reg_arg/2
v3_codegen: Clean up comments and remove out-commented code
v3_codegen: Clarify code generation for binary construction

Add some comments to make the code generation for binary
construction somewhat clearer. Also get rid of the cg_bo_newregs/2
function that serves no useful purpose. (It was probably
intended to undo the effect of cg_live/2, but note that the
value passed to cg_bo_newregs/2 has not passed through cg_live/2.)
beam_utils: Check liveness in catches and try/catch blocks

Less conservative liveness analysis allows more optimizations
to be applied (such as the ones in beam_bool).
beam_utils: Extend live_opt/1 to recalculate live registers in allocs

The code generator uses conservative liveness information. Therefore
the number of live registers in allocation instructions (such as
test_heap/2) may be too high. Use the actual liveness information
to lower the number of live register if it's too high.

The main reason we want to do this is to enable more optimizations
that depend on liveness analysis, such as the beam_bool and beam_dead
passes.
beam_utils:live_opt/1: Correct liveness calculation for 'try'

The liveness at the failure label should be ignored, because if
there is an exception, all x registers will be killed.
beam_utils: Correct usage calculations for GC BIFs in blocks

The usage calculation only looked at the allocation in GC BIFs, not
at the source and destination registers. Also, if there is a failure
label, make sure that we test whether the register can be used there.
beam_bool: Recognize more safe optimizations

The optimizer of boolean expressions can often reject optimizations
that it does not recognize as safe. For instance, if a boolean
expression was preceded by 'move' instructions that saved x registers
into y registers, it would almost certainly reject the optimization
because it required the y register not be used in the code that
follows.

Fix this problem by allowing identical 'move' instructions that assing
to y registers at the beginning of the old and the optimized code.

While at it, correct the spelling of "preceding".
v3_codegen: Combine adjacent bs_match_string instructions

In modules with huge functions with many bs_match_string
instructions, we can speed up the compilation by combining
adjacent bs_match_strings instruction in v3_codegen (as opposed
to in beam_block where we used to do it).

For instance, on my computer the v3_codegen became more than
twice as fast when compiling the re_testoutput1_split_test module
in the STDLIB test suites.
Improve binary matching of literals

The bs_match_string instruction is used to speed up matching of
binary literals. For example, given this source code:

foo1(<<1,2,3>>) -> ok.

The matching part of the code will look like:

    {test,bs_start_match2,{f,1},1,[{x,0},0],{x,0}}.
    {test,bs_match_string,{f,3},[{x,0},24,{string,[1,2,3]}]}.
    {test,bs_test_tail2,{f,3},[{x,0},0]}.

Nice. However, if we do a simple change to the source code:

foo2(<<1,2,3>>) -> ok;
foo2(<<>>) -> error.

the resulting matching code will look like (sligthly simplified):

    {test,bs_start_match2,{f,4},1,[{x,0},0],{x,0}}.
    {test,bs_get_integer2,{f,7},1,[{x,0},{integer,8},1,Flags],{x,1}}.
    {test,is_eq_exact,{f,8},[{x,1},{integer,1}]}.
    {test,bs_match_string,{f,6},[{x,0},16,{string,[2,3]}]}.
    {test,bs_test_tail2,{f,6},[{x,0},0]}.
    {move,{atom,ok},{x,0}}.
    return.
  {label,6}.
    {bs_restore2,{x,0},{atom,start}}.
  {label,7}.
    {test,bs_test_tail2,{f,8},[{x,0},0]}.

That is, matching of the first byte is not combined into the
bs_match_string instruction that follows.

Fix this problem by allowing a bs_match_string instruction to be
used if all clauses will match either the same integer literal or
the empty binary.
v3_kernel: Fix match code for matched out segment size in multiple clauses

When matched variable is used as a size field in multiple clauses,
as in:

foo(<<L:8,A:L>>) -> A;
foo(<<L:8,A:L,B:8>>) -> {A,B}.

the match tree would branch out before the segment that used the
matched-out variable (in this example, the tree would branch out before
the matching of A:L). That happens because the pattern matching
compilator did not take variable substitutions into account when
grouping clauses that match the same value.

That is, the generated code would work similarly to this code:

foo(<<L:8,T/binary>>) ->
  case T of
    <<A:L>> ->
      A;
    _ ->
      case T of
        <<A:L,B:8>> ->   %% A matched out again!
	  {A,B}
	end
  end.

We would like the matching to work more like:

foo(<<L,A:L,T/binary>>) ->
  case T of
    <<>> -> A;
    <<B:8>> -> {A,B}
  end.

Fix the problem by taking the substitutions into account when grouping
clauses that match out the same value.
beam_jump: Fix broken optimization

A test instruction with the same target label as jump immediately
followed it was supposed to be removed, but it was kept anyway.

Fix that optimization, but also make sure that the test instruction
is kept if the test instruction may have side effects (such as
a bit syntax matching instruction).

While at it, make the code cleaner by breaking it up into two clauses
and don't remove the jump instruction if it is redudant (removal of
redundant jump instructions is already handled in another place).
beam_jump: Don't move a block which can be entered via a fallthrough

beam_jump moves short code sequences ending in an instruction that causes
an exception to the end of the function, in the hope that a jump around
the moved blocked can be replaced with a fallthrough. Therefore, moving
a block that is entered via a fallthrough defeats the purpose of the
optimization.

Also add two more test cases for the beam_receive module to ensure that
all lines are still covered.