Fix sprious compile error on VS2015 Preview.

MSVC 2015 Preview will treat unary-ctor call as a variable declaration
even if member call follows, which member has the same name with any
other class (i.e. there are no relations between the member and such
class). This issue already reported at [1].

1. https://connect.microsoft.com/VisualStudio/feedback/details/1037783/unary-ctor-call-v-s-variable-decl

    struct foo
    {
        foo(int) {}
        void set() {}
    };

    struct set;

    int main()
    {
        int i;
        foo(i).set(); // VS2015 try to decl `i` here and conflict with above.
    }
Replace some usage of std::forward to static_cast.

For more details, See inline comment of include/boost/fusion/support/config.hpp .
Workaround for MSVC8.0

I'm not sure why it doesn't compile...
Fixed for non rv-ref supporting compiler.
Use call_param for deducing type better.