Use variadic templates for PushBackTuple and PushFrontTuple, if available

The two classes PushBackTuple and PushFrontTuple are both implemented
using a long list of template specializations.  This makes for a lot
of code, and it also limits the maximum tuple size that can be used.
Using variadic templates (FYI: available since gcc-4.3) instead
allows a generic implementation in only a few lines of code, and
only the compiler being the upper limit on tuple size.

An implementation using variadic templates has already been given
in the documentation of PushBackTuple/PushFrontTuple.  This patch
starts to actually use that implementation, provided that
HAVE_VARIADIC_TEMPLATES is set.  Otherwise the old implementation
is used.