Fix two problems with duplicated semantic detection

1. StructMember was missing the necessary virtual function
   overrides for getStruct() so structs within structs weren't
   being descended into.

2. appendDuplicatedInSemantics took the sem in as a std::string,
   but >1 semantic name maps to each semantic enum
   (e.g. 'color' and 'color1'); use EAttribSemantic instead.