refactored linalg's dot product

- Changed the template for the implementation structs from ``` <class Info,enum Backend,template<class,Info...>class Vector,class T,Info... I> ``` to ``` <enum Backend, class Vector> ```. This is simpler and works with any matrix type
- Eigen3 matrices are handled as described [here](http://eigen.tuxfamily.org/dox/TopicFunctionTakingEigenTypes.html). This makes the methods in the library work with any Eigen3 matrix type, including expressions.
- ViennaCL matrices are handled using CGPUVector/CGPUMatrix

@lambday, @karlnapf, @lisitsyn, please take a look. If you guys are okay with those changes, I'll change the rest of the library in the same manner.
ummm nah that doesn't work for, say, complex128_t and float64_t :(