Moved function definitions into class template
Added defines for different compiler versions of MSVC and gcc.


The definitions are based on availability of C++0X/C++11 features.
Added assignment operator for matrix proxies.

The assignment operator operates directly on the underlying matrix data.
It does NOT swap the pointers of the proxies.