Add check for duplicate constructors within the same unit

This is a proposed fix for #380.  Comments welcome.  `msg` and `dup` look a bit silly sitting at top level ...

This is implemented in the "front-end" in a way similar to the checks for duplicate definitions and type synonyms, and, as with those, you currently don't get line numbers.

There's still a problem involving data and types imported from the Prelude or `open`ed modules.  I'll open a separate ticket for that.