Unnamed parameters for ParameterIdentifierTuple, fix name conflict for ParameterDefaultValueTuple

Previously, the following code:
````
import std.traits;
void func(string[] args = ["42"], int[] b = [42], int = 10) {}
alias DefVal = ParameterDefaultValueTuple!func;
````

Would lead to a CT error:
````
[...]/phobos/std/traits.d(1144): Error: delegate std.traits.ParameterDefaultValueTuple!(func).Get(ulong i) parameter __lambda2.args is already defined
[...]/phobos/std/traits.d(1173): Error: template instance std.traits.ParameterDefaultValueTuple!(func).Get!0LU error instantiating
````

because the name of the parameter conflicted (both were named "args").
This change gets a reference to the parameter, avoiding re-declaring the name, thus no conflict are possible.
In the process, I realized that `ParameterIdentifierTuple` would not compile if a function had an unnamed parameter, so I fixed it. The fix isn't pretty, but I couldn't figure another way around.