Template alias SFINAE && param pack expansion in function types

utility::always_void was changed with regard to 
http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#1558

detail::_reduce_if_ and detail::_replace_if_ were changed as to avoid disagreement about param pack expansion in
that context.

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57384