Issue 11706 - Add a TypedefType trait to extract the underlying type of a std.typecons.Typedef

https://issues.dlang.org/show_bug.cgi?id=11706

Thanks to some compiler improvements this can be entirely implemented outside the `Typedef` definition.
No, it is generic pattern matching thing:
```D
struct ZZZ (T1, T2) { }

alias Z = ZZZ!(int, double);

static if (is(Z == ZZZ!(int, T), T))
{
	pragma(msg, T);
}
```

Anything that can be in template parameter list can go after comma