make safe for localized (lazy gettext) display names

-  return canonical_name rather than display_name (which may be localized) when coercing richenum to string or unicode
- when used with % operator, lazy gettext proxy objects need to be resolved first with str()