Core: Now checking for self-assignments in viennacl::matrix<> and viennacl::vector<>

Can be useful in terms of performance when one doesn't know if the vectors will be the same.
For example:
vector<float>* a, vector<float>* b;
//do stuff
*a = *b;
I don't think the user should have to take care of it