CallDescription constructor now accepts an ArrayRef<const char *>, instead of two different constructors for StringRef and std::vector<StringRef>.
This allows us to write an init-list of a vector of CallDescription objects as:
vector<CallDescription> V = { { { "foo" }, 1 }, { { "q1", "q2", "bar" }, 2 }, ... };
achieving uniformity between unqualified and qualified descriptions, while still allowing the old syntax of { "foo", 1 } (without braces around "foo"). Previously { { "foo" }, 1 } wouldn't have compiled, because the compiler was unable to figure out which constructor to call (because {} are allowed to be omitted or added indefinitely as a redundancy).
As a cost of that, i had to switch from StringRefs to raw pointers, because you can't automatically convert an initializer-list of C strings to an ArrayRef of StringRefs. But that doesn't seem bad, because StringRefs aren't that much different from raw pointers, and in practice only static strings will be used.
Also squash a mutable copy of that array.