Improve performance of argument list parsing with large numbers of IDs and large numbers of arguments, by tracking a conservative range of indexes within the argument list that might contain an argument with each ID. In the worst case (when the first and last argument with a given ID are at the opposite ends of the argument list), this still results in a linear-time walk of the list, but it helps substantially in the common case where each ID occurs only once, or a few times close together in the list.
This gives a ~10x speedup to clang's test/Driver/response-file.c, which constructs a very large set of command line arguments and feeds them to the clang driver.
In passing I also converted the interface to use variadic templates. I can split those changes into a separate patch if you'd prefer.