Improve linting of map expressions

Map fields are put in their own function instead of being clauses of expr/3.
Also, invalid map construction expressions now emit one error per ':=' field,
at the location of said field instead of one for the whole expression,
furthermore, such warnings do not stop linting of their key and value
expressions anymore.

Ill-formed maps constructions are now also properly detected in guard expressions
and key patterns now legal only if they are guard expressions.