Allow more type names

product/_, union/_, range/2 as well as tuple/N (N > 0), map/N (N > 0),
and record/_ can now be used as type names.
Fix a -callback attribute bug

sys_pre_expand used to crash. There is no known reason to
allow -callback attributes with explicit module.
Disallow '_' as type variable

"... when _ :: ..." used to compile, but Dialyzer crashed.