Tensor substitute bug

This is a refactoring of all data handling inside the tensor module. Numpy-data are now evaluated lazily, only when accessed data are computed. This will help keeping the code clear, separating the abstract tensor operations from the numpy tensor operations.

TODO list:

* [ ] should it be possible to assign data to `TensMul`
* [ ] should it be possible to assign data to `TensAdd`
* [ ] check that no autodrop points exist anymore
* [ ] data deletion once the referring tensor is deleted?
* [ ] assign a numpy ndarray to a tensor (e.g. `A.data = ndarray_instance`), check parsing and write a test.
* [ ] docstring notice about how data will be treated after the tensor destruction.
* [ ] add a cache and a garbage collector? Do it now or in a future PR?