Is a String ever not a StringKey? Seems like the base String class should just implement the interface for StringKey. The current implementation seems to handle this with a conversion. Does that have a performance impact opposed to making the base String class implement the methods from StringKey?