WIP: Tensor Internal Data Structure

This is a draft to reorganize tensor data. I created a class `TIDS` which stores `(components, free, dum)` of a tensor expression. `TIDS` does not inherit `Basic`, and overloads only `__mul__` (to handle multiplications of tensor expressions). Other operators are not needed as they will not modify the triplet `(components, free, dum)`.

`TensMul` now stores its `(components, free, dum)` in a `TIDS` object. As of now `TensMul` still fails the `test_args` test, but this PR is surely a step forward to solve that failure.

TODO list:

 * [ ] port all algorithms manipulating `free` and `dum` to `TIDS`.