Fixed soap memory leak

Uses unordered_sets instead of vectors for SoapData collections m_sdls, m_typemaps, and m_encodings. This way when the same pointer is added to the collection multiple times, the collection doesn't unnecessarily consume memory.

Closes #2828.