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.
@khalednasr why should we use two different Derived here? will this enable us to call dot on vectors of two different scalar types or this is to be flexible about one fixed and one dynamic sized vectors? Via redux wrappers I think only a single vector type is handled. If it helps in terms of flexibility, could you please add a tiny unit-test for that?