Introduce StringMap array of kStrMapKind

Summary: StringMap uses the same machinery as IntMap, by changing how ArrayFunctions
dispatches to ##kStrMapKind##ed arrays. StringMap will warn when:

 * Is appended to
 * Is used to lookup/set/remove integer keys
 * Is sorted/usorted
 * Has elements taken by reference or given values that are references

This diff also changes some of the machinery for raising warnings.

Reviewed By: eletuchy, andrewparoski

Differential Revision: D1436599