[TypeTraits] Fix first_type TMP for GCC 4.6

first_type is a simple TMP that extracts the first type of a variadic
template argument pack. The template argument list of that TMP was
directly coded with that in mind as template<typename T0, typename... T>,
but apparently GCC 4.6 has a bug where it will refuse to unpack a
variadic template argument pack into such a parameter list, which is of
course nonsense, but we'll have to deal with it.

So this patch modifies first_type to have an unimplemented prototype
that only contains a template<typename... T> signature, while the actual
implementation is now a specialization. Doh!

Thanks to Andreas Buhr for reporting the problem!