Fix some problems with parsing yaml and __str__

Changes __str__ to __unicode__ because `self.name` holds the translated
entity name (i.e. is not guaranteed to be ASCII only). Ideally a
representation like this would always yield the English (untranslated)
name for debugging purposes, but this at least avoids simply crashing.

Looking for a KeyError no longer makes sense now that we don't actually
check any dictionary for its keys. Thus moving the sanity checks into
existing (and now probably misnamed) method. At least it's documented...