Use unique_ptr to handle ownership of synthesized args in DerivedArgList

This might be able to be simplified further by using Arg as a value type
in a linked list (to maintain pointer validity), but here's something
simple to start with.