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.
@lambday it was for flexibility, but I forgot to add another vector type to the redux wrapper. I'll take care of it in the next patch.