Fixing issue of structural equality and hash in tensor module

This PR solves the problem of structural equality comparison in the tensor module.

In the current master, `__eq__` and `__hash__` are overridden in order to provide mathematical equality of tensors. In reality `__eq__` should just test the structural equality, it should be inherited by `Basic`, the same applies to `__hash__`.

I thought initially of renaming `__eq__` to `__eval_Eq`, but `Eq` should either return `True` or return an equality, while the mathematical equality test on tensors should always return either true or false.

In the end, `__eq__` has been renamed to `equals`, and the custom `__hash__` has completely been removed.

With this PR the tensor module should allow its objects to be manipulated by `unify` and `rewriterule`.