compiler: Change Maps Core Format

Ex.

Instead of:

    M~{~<K,V>}~

The format is now:

    ~{~<K,V>|M}~

This also removes a shift/reduce warning.

The changes in core_pp now requires compiler-5.0 to compile
because of is_map/1 guard, i.e. a need for a compiler with Maps know-how.
erts: Handle literals in is_map/1
compiler: Guard BIF is_map/1 is pure
compiler: Support literal maps in cerl_clauses:match/2
compiler: Validate Map src

Reject all expressions that are known to fail.
Emit 'badarg' for those expressions.

Ex.

    []#{ a => 1}

Is not a valid map update expression.
compiler: Constant fold Maps that are safe

For updates of Map literals which may cause an error will be
determined in runtime, i.e. instructions are emitted for those
updates.

The changes in cerl now requires compiler-5.0 to compile because of
is_map/1 guard.
compiler: Change #c_map{var} to #c_map{arg}

Not only variables are allowed as arguments, the name should reflect that.

Change cerl Map argument interface
 * cerl:map_arg/1 is more suitable then cerl:map_val/1 in this case.
stdlib: Properly lint map key expressions

Only values are valid key expressions.
stdlib: Move map type to proper definition
stdlib: Accept Maps as Map keys
stdlib: Accept records as Map keys
stdlib: Test Map key linting

This will change in future release.
hipe: Properly identify map() type form terms
dialyzer: Do not native compile modules with Maps code

hipe:c/1 ignores '-compile(no_native).'
compiler: Transform M#{} to is_map(M)

Core should not understand M#{}

Instead transform M#{} to

    case _cor0 of
      <_cor1>
          when call 'erlang':'is_map'
                (_cor0) ->
          _cor1
      ( <_cor2> when 'true' ->
            primop 'match_fail'
                ('badarg')
        -| ['compiler_generated'] )
    end
Merge branch 'lukas/erts/make_deps_fixes/OTP-11784'

* lukas/erts/make_deps_fixes/OTP-11784:
  erts: Fix resolve of generated files for depend
  erts: Move compiler flags generation
[snmp/manager] Verify success for app start and stop in test cases

When starting and stopping apps verify success. If failure
to start or stop app force failure of test case or init/fin
of test case. Also, be more verbose regarding stop results
during test case finish.
Merge branch 'ia/ssl/ECC-error-handling/OTP-11780'

* ia/ssl/ECC-error-handling/OTP-11780:
  ssl: Server now ignores client ECC curves that it does not support instead of crashing.
  Add test for unknown elliptic curve supported by client
Merge branch 'nox/maps-eval-empty-update'

* nox/maps-eval-empty-update:
  Fix evaluation of empty map patterns in erl_lint
  Fix evaluation of empty map updates in the debugger
  Fix evaluation of empty map updates in erl_eval
Merge branch 'egil/maps-literals'

* egil/maps-literals:
  compiler: Transform M#{} to is_map(M)
  dialyzer: Do not native compile modules with Maps code
  hipe: Properly identify map() type form terms
  stdlib: Test Map key linting
  stdlib: Accept records as Map keys
  stdlib: Accept Maps as Map keys
  stdlib: Move map type to proper definition
  stdlib: Properly lint map key expressions
  compiler: Change #c_map{var} to #c_map{arg}
  compiler: Constant fold Maps that are safe
  compiler: Validate Map src
  compiler: Support literal maps in cerl_clauses:match/2
  compiler: Guard BIF is_map/1 is pure
  erts: Handle literals in is_map/1
  compiler: Change Maps Core Format
  compiler: Create literal Maps in creation if possible