Fixed StringPlug string substitution bug.

When a StringPlug received an input connection from another StringPlug whose value contained a substitution, we were incorrectly calculating the hash for the receiving plug, by not taking into account the substitutions. This was caused by the recent ValuePlug optimisation whereby ValuePlug::hash() traverses to the source plug and hashes the value held there - this bypassed the StringPlug::hash() override for the source plug. The solution is to perform the same "find the source first" optimisation in StringPlug::hash().