MSVC: Work around is_functor_argument_immutable breakage
MSVC: Work around is_functor_argument_immutable breakage

- MSVC rejects the template keyword on operator template instantiation.
  See also:
  https://connect.microsoft.com/VisualStudio/feedback/details/2591761
- MSVC considered the overload set of the test and test3 functions to be
  ambiguous. There's a nice workaround that uses `std::is_const<A>` as
  return type and can thus drop all the const parameter overloads. This
  also works on GCC 5 and clang 3.8.

Refs: gh-119
Signed-off-by: Matthias Kretz <372ea4eca737a13cd010ee806d4ce7b98ee71550@kde.org>

chr-engwer/Vc,VcDevel/Vc,VcDevel/Vc,chr-engwer/Vc,chr-engwer/Vc,VcDevel/Vc,VcDevel/Vc