Variant constructor names and record field names must be handled in a cleaner way.

Issue #23 new
repo owner created an issue

Currently they are treated as type names, but this is a cheap fake, and it caused issue #15, and the workaround of it was very dirty. We need fix this.