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.
Put "precision mediump float;" at the top of every fragment shader

Precision is emitted (always mediump) for converted types, but
unfortunately this lib also emits raw text without the precision
qualifiers, see for example initializeHLSLSupportLibrary()
Leak fixes WIP