Fix variable usage tracking in erl_lint

When analyzing complex expressions (i.e. comprehensions, cases, tries,
ifs and receives), erl_lint does not forget about old unused variables
when returning the updated variable table. This causes a bug where old
unused variables are not recorded as such:

t(X, Y) ->
  #r{a=[ K || K <- Y ],b=[ K || K <- Y ]}.

As erl_lint uses vtmerge_pat/2 to merge the results of the analysis of
the two list comprehensions, X is marked as used and the warning is not
emitted.

The function vtmerge_pat/2 is used instead of the similar vtmerge/2
which does not mark multiple occurrences of a variable as usage to
handle cases like the following one:

t(X, Y) ->
  #r{a=A=X,b=A=Y}.

Other simpler expressions like conses, tuples and external fun
references do not correctly follow this behaviour, e.g. A is not marked
as used in the following code:

t(X, Y) ->
  {A=X,A=Y}.

This commit fixes both issues and makes erl_lint not return old unused
variables in updated tables and makes all compound expressions use
vtmerge_pat/2.

Reported-by: Anders Ramsell
Fix unsafe variable tracking in try expressions

Variables used in the body of a try expression were marked as unsafe
*and* used, which makes no sense as an unsafe variable can't be used.

Function vtsubtract/2 is used to forget usage of such unsafe variables.

Reported-by: Paul Davis
Fix variable usage tracking in some record errors

When reporting a field redefinition in a record, erl_lint can forget
about some old unused variables.
Merge branch 'dg/win_icon' into pu
Merge branch 'ao/fix_mnesia_block_table_exception' into pu
Merge branch 'sze/edlin_understand_keys' into pu
Merge branch 'sze/limit_max_length_int_shell' into pu
Merge branch 'yi/fix_eunit_io_protocol' into pu
Merge branch 'nox/igor-funs' into pu
Merge branch 'feat/erl_tidy_print_to_stdout' into pu
Merge branch 'epa/fix_io_noreturn_with_self_pid' into pu
Merge branch 'nox/fix-erl_lint-variable-usage' into pu
Merge branch 'ali/fix-inet-typespec' into pu
Merge branch 'mh/line-initial-commas' into pu
Merge branch 'lpg/openssh_zlib' into pu
Merge branch 'jw/fix-httpd-erl-script-nocache' into pu
Merge branch 'hm/reltool_script' into pu
Merge branch 'sg/odbcserver_crash_fix' into pu
Merge branch 'epa/add_fd_usage_in_rb' into pu
Merge branch 'nox/match-context-return' into pu