I would like to make a few comments on this subject because I think there is still good work that can be done toward better tensor or differential geometry applications in Mathematica.
I have just finished working through all the help pages for the Mathematica symbolic tensors and I believe the routines are very significant and useful. They are especially useful at handling abstract tensors, general symmetries and canonicalization (or simplification) of tensor expressions. On the other hand it is weak on nice notation and doesn't even mention a metric. A disadvantage of matrices and arrays is that they don't carry context. How are various levels of an array associated with physical or geometric quantities. Should a matrix be transposed? Or inverted? When contracting, how are covariant and contravariant components distinguished? Or transformed?
Index notation goes a long way to solving the context problem. Tensorial allows users to use coordinate symbols for indices and to adorn or color them for various coordinate systems. It is also very friendly for writing indexed tensor expressions and doing basic calculations. Tensorial also has facilities for writing tensor expressions that can be converted to Mathematica arrays. I used it to work through all the examples and exercises in an introductory GR text. And indices are still the most common notation. Nevertheless, the whole idea of putting all the structure information on scalar quantities is a bit crazy. Mathematica sorts them. It is very difficult to canonicalize and simplify general tensor expressions. The Mathematica approach is much better at that. Also, index notation makes it difficult to distinguish between abstract and concrete tensors. With the Mathematica routines you can define and do manipulation of abstract tensors without ever mentioning components.
Another approach is to use Grassmann algebra. For some time I've been working with John Browne's GrassmannAlgebra application. He has built up a strong axiomatic system and Mathematica code that goes from the basic exterior product to hyper-complex algebras, including Clifford algebra, quaternions and even sedtonions. I was easily able to implement symbolic quaternions with his application. Grassmann algebra carries context and structure with the product symbols (as does Mathematica) and with the presence of vectors, either basis vectors or symbolic abstract vectors.
I've been working with John to improve the interface and to extend GrassmannAlgebra to GrassmannCalculus. I've written routines that transition between Grassmann algebra expressions and the Mathematica tensor arrays. I'm trying to reach a state such that the application would work smoothly with a book such as John M. Lee's "Introduction to Smooth Manifolds". But there is much work to do and we could greatly benefit from the help of anyone with a serious interest in this field.