This patch makes the members of TemplateParameterInfos only accessible
via public APIs. The motivation for this is that
TemplateParameterInfos attempts to maintain two vectors in tandem
(args for the template arguments and names for the corresponding
name). Working with this structure as it's currently designed makes
it easy to run into out-of-bounds accesses later down the line.
This patch proposes to introduce a new
TemplateParameterInfos::InsertArg which is the only way to
set the TemplateArgument and name of an entry and since we
require both to be specified we maintain the vectors in sync
out-of-the-box.
To avoid adding non-const getters just for unit-tests a new
TemplateParameterInfosManipulatorForTests is introduced
that can be used to control internal state from tests.